为了账号安全,请及时绑定邮箱和手机立即绑定

将 JButton ActionListener添加到另一个 *.java 文件中的按钮不起作用

将 JButton ActionListener添加到另一个 *.java 文件中的按钮不起作用

当年话下 2022-10-12 10:20:55
我正在尝试将 ActionListener 添加到在另一个 *.java 文件中定义的 JButton,但它不起作用。如果我从 Main 公共类调用这个 JButton 它工作得很好,我错过了什么?我正在使用 Java Swing 构建一个简单的绘画应用程序。我已将代码分成几个 *.java 文件以使其更具可读性。JButtons 在 SideBar.java 文件中定义,我想添加 ActionController.java 文件,该文件将调用 JButtons 的所有 actionListener。但是当我添加 .addActionListener() 的代码(在 ActionController.java 文件中)时,当我按下按钮时没有任何反应。但是,当我在 Main.java 文件中添加相同的代码时,按下的按钮工作得很好。有人可以告诉我我错过了什么吗?我还有另一个关于代码可读性的问题。我是Java新手,所以我的问题是把代码分成这么多类的逻辑是否好?我创建了一个 Main 类来定义应用程序的框架,SideBar.java 将包含侧边栏的所有布局,TopMenu.java 将包含应用程序的菜单,DrawingArea.java 将是空白的图形应用程序的纸张,Draw.java 将包含绘图的所有功能(调整铅笔大小,选择颜色),以及将所有功能(在 Draw.java 文件中定义)分配给按钮、滑块的 AcionController.java等等。这是创建应用程序的好方法,还是您建议以其他方式划分它?您可以在下面找到我迄今为止编写的应用程序的代码:主.javapackage sample;import sample.applicationLayout.ActionController;import sample.applicationLayout.DrawingArea;import sample.applicationLayout.TopMenu;import sample.applicationLayout.SideBar;import javax.swing.*;import java.awt.*;public class Main {    Main() {        //creating Frame for the application        JFrame frame = new JFrame("Paint Application");        //creating menu        TopMenu menu = new TopMenu();        frame.setJMenuBar(menu);        //END OF MENU        SideBar sideBar = new SideBar();        DrawingArea drawingArea = new DrawingArea();        ActionController actionController = new ActionController();        actionController.clickOnButtons();        frame.add(sideBar, BorderLayout.WEST);        frame.add(drawingArea, BorderLayout.CENTER);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setSize(1200, 800);        frame.setLocationRelativeTo(null);        frame.setVisible(true);    }//end of Main()    public static void main(String[] args) {        new Main();    }//end of public static void main(String[] args)}//end of Main class动作控制器.javapackage sample.applicationLayout;import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

好的!我再次回答我自己的问题:) 但我想出了答案,也许它会帮助别人。问题在于两次初始化 SideBar 类,一次在 Main.java 文件中,第二次在 ActionController.java 文件中。我更改了以下代码:


在 Main.java 文件中:


actionController.clickOnButtons();

变成:


actionController.clickOnButtons(sideBar);

在 ActionController.java 文件中:


SideBar sideBar = new SideBar();

ListenForButton listenForButton = new ListenForButton();


public ActionController() {

}


public void clickOnButtons() {

    sideBar.getButton_pencil().addActionListener(listenForButton);


}

变成:


ListenForButton listenForButton = new ListenForButton();


public ActionController() {

}


public void clickOnButtons(SideBar sideBar) {

    sideBar.getButton_pencil().addActionListener(listenForButton);


}

也许这会在未来给其他人一个提示。


查看完整回答
反对 回复 2022-10-12
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信