关于jmenuitem选择的对话

时间:2013-04-03 19:24:57

标签: java swing awt

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

问题在于,当选择其中一个JmenuItems时,它应该是一个Dialogue,要求用户输入一个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
    }
}

我想避免在我的eventhandler类中创建swing组件,并避免在我的组件类中使用eventhandler,但我认为没有办法解决它。

1 个答案:

答案 0 :(得分:1)

创建自定义ActionLIstener,并为构造函数传递项目的引用,它需要引用(即使您放置侦听器的对象与actionPerformed()方法所需的对象相同。 / p>

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都需要一个监听器。