如何从jmenu(菜鸟)中获取所选条目

时间:2017-09-27 18:59:42

标签: java actionlistener jmenu

我刚刚与JMenus做了一些尝试。 现在我想对所选项目做出反应。但我不确定找到所选项目的最佳方法是什么。 如果我向每个MenuItem添加一个actionListener并从抛出的actionEvent中获取actionCommand,它会按预期工作。不幸的是,这意味着我需要在菜单中为每个项目添加一个addListenerMethod。 现在我想知道是否有更优雅的方式。我可以直接将监听器添加到菜单中并接收所选项吗?稍后我想在我的菜单中添加子菜单。 感谢帮助。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Starter {

    public static void main(String[] args) {
        Starter starter = new Starter(); 
        starter.work();

    }

    private void work()
{
    Test test = new Test(); 


    ActionListener al = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println(e.getActionCommand());

        }
    };

    test.addDateiListener(al);
    test.addt1Listener(al);
    test.addt2Listener(al);
    test.setVisible(true);


}

}

import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Test extends JFrame {

private JPanel contentPane;


private JMenu datei; 
private JMenuItem t1, t2;

public Test() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 815, 394);

    JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);

    datei = new JMenu("Datei");
    menuBar.add(datei);

    t1 = new JMenuItem("t1");
    datei.add(t1);

    t2 = new JMenuItem("t2");
    datei.add(t2);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);


}

public void addDateiListener(ActionListener al)
{
    datei.addActionListener(al);
}

public void addt1Listener(ActionListener al)
{
    t1.addActionListener(al);
}
public void addt2Listener(ActionListener al)
{
    t2.addActionListener(al);
}


}

0 个答案:

没有答案