Java 关于项目选择的对话

Java 关于项目选择的对话,java,swing,awt,Java,Swing,Awt,我构造了一个GameFrame类,它有一个带有jmenubar的JFrame,并在菜单中添加了一些项目。出于面向对象的原因,我将actionlistener类从游戏框架中分离出来(实现我自己的类,并将其作为参数传递给frames jmenubar) 问题是,当选择了一个JmenuItems时,它会弹出一个对话框,要求用户输入URL。但此对话框仅在选择菜单项时创建,因此如何避免执行以下操作?(这不是很糟糕) 我想避免在我的eventhandler类中创建swing组件,并避免在我的componen

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

问题是,当选择了一个
JmenuItems
时,它会弹出一个对话框,要求用户输入URL。但此对话框仅在选择菜单项时创建,因此如何避免执行以下操作?(这不是很糟糕)


我想避免在我的eventhandler类中创建swing组件,并避免在我的component类中创建eventhandler,但我看不到解决方法。

创建一个自定义的
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都需要一个监听器。

我不明白为什么它不应该是非常面向对象的。你能详细说明一下吗?不管怎样,为什么不创建JDialog,在其中初始化其余组件,并使其在actionPerformed中可见,一旦获得URL就不可见?还有考虑
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());
    }

}