我可以将ActionListeners添加到单独的类窗口吗?

时间:2015-07-19 19:11:47

标签: java class user-interface

我目前在构造函数下声明了所有的动作侦听器,但是我开始构建它们。是否可以创建一个新类(通过默认包窗口)并将它们全部分开?

这对我来说显而易见,我已经尝试了这个并且没有错误,但我的应用程序在我这样做时不会加载,它说它是开放的但是没有任何错误。

这是我的代码可编辑的链接..我已经注释掉了使用其他类的任何东西(没有多少),如果我错过任何只是评论它们。

https://shrib.com/Tum8kjgH?v=nc

谢谢!

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是在自己的类中声明每个侦听器。例如,对于某些按钮:

public class SomeButtonActionListener implements ActionListener{

    private InternalFrame iFrame;

    public SomeActionListener(InternalFrame iFrame){
        this.iFrame = iFrame;
    }

    public void actionPerformed(ActionEvent ae) {
        //TODO
        //Example: iFrame.getSomeButton().doSomething();
    }
}

请注意,通过这种方式,您需要为需要从侦听器访问的所有swing组件公开getter方法(另一种方法是在调用构造函数时将需要的特定组件作为参数发送给侦听器。)

在您的InternalFrame中,您可以将侦听器添加为:

someButton.addActionListener(new SomeButtonActionListener(this));

此外,您可以将所有听众放在yourapp.listeners等特定包中。

修改

更具体的例子:

public class AddRoomListener implements ActionListener{
    private InternalFrame iFrame;

    public AddRoomListener(InternalFrame iFrame){
        this.iFrame = iFrame;
    }
    public void actionPerformed(ActionEvent event) { 
        iFrame.getIntFrame2().setVisible(true);
        iFrame.getIntFrame2().toFront();
    }
}

在这种情况下,您需要在getIntFrame2()类中声明InternalFrame getter。