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

我正在尝试将 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等等。这是创建应用程序的好方法,还是您建议以其他方式划分它?

您可以在下面找到我迄今为止编写的应用程序的代码:

主.java


package 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

动作控制器.java


package sample.applicationLayout;


import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



当年话下
浏览 113回答 1
1回答

料青山看我应如是

好的!我再次回答我自己的问题:) 但我想出了答案,也许它会帮助别人。问题在于两次初始化 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);}也许这会在未来给其他人一个提示。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java