0

我构造了一个 GameFrame 类,它有一个带有 a 的 JFrame, jmenubar并在菜单中添加了一些项目。出于 OOP 的原因,我将 actionlistener 类(实现我自己的并将其作为参数传递给框架 jmenubar)从 GameFrame 中分离出来。

问题是,当其中一个JmenuItems被选中时,它应该启动一个对话,要求用户输入一个 URL。但是只有在选择菜单项时才会创建此对话框,所以我该如何避免执行以下操作?(这不是很 OOP)

@Override
public void actionPerformed(ActionEvent e) {
    JMenuItem item = (JMenuItem) e.getSource();

    if (item.getText().equals("URL")) {
        //create a dialogue 
        //get the input
        //pass it to something else
    }
}

我想避免在我的事件处理程序类中创建摆动组件并避免在我的组件类中使用事件处理程序,但我看不出有什么办法。

4

1 回答 1

1

创建一个 custom ActionLIstener,并为构造函数传递它需要引用的项目的引用(即使您放置侦听器的对象与您在actionPerformed()方法上需要的对象相同。

class MyActionListener implements ActionListener {

    JMenuItem item;

    MyActionListener(JMenuItem item) {
        this.item = item;
    }

    public void actionPerformed(ActionEvent e) {
        // here you have the reference for the item. Printing the text:
        System.out.println(item.getText());
    }

}

这种方法的缺点是每个 JMenuItem 都需要一个侦听器。

于 2013-04-03T19:53:31.990 回答