我构建了一个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,但我认为没有办法解决它。
答案 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都需要一个监听器。