Обновите JMenuItem через ActionListener - PullRequest
1 голос
/ 10 января 2012

Я пытаюсь создать JMenuItem, который по умолчанию отключен, но для его активации можно вызвать метод.На мгновение, пока я тестирую свой код, я хочу, чтобы метод вызывался при нажатии на другой пункт меню.Я взглянул на документацию по JMenuItem, но я довольно плохо знаком с Java и не могу найти именно то, что мне нужно.Я пытался использовать команду updateUI (), но у меня это не сработало, поэтому я полностью застрял.Заранее спасибо за любую помощь:)

Это то, что я имею до сих пор:

public class initialScreen extends JFrame implements ActionListener{

    Dimension screenSize = new Dimension(800,600);
    JMenuItem runE, newP;

    public initialScreen(){
        super("Experiment Control Suite");
        setSize(screenSize);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenuBar bar = new JMenuBar();

        JMenuItem newP = new JMenuItem("New");
        newP.addActionListener(this);

        runE = new JMenuItem("Run");
        runE.setEnabled(false);
        runE.addActionListener(this);

        JMenu exp = new JMenu("Experiment");
        exp.add(runE);      

        JMenu par = new JMenu("Participant");
        par.add(newP);
        bar.add(exp);
        bar.add(par);
        setJMenuBar(bar);

        setVisible(true);
    }

    public void enableRun(){
        runE.setEnabled(true);
        runE.updateUI();
    }

    public void actionPerformed(java.awt.event.ActionEvent e){
        if(e.getSource() == newP) {
            enableRun();  
        }
        else if(e.getSource() == runE) {
            System.out.println("run has been clicked");
        }
    }

}

1 Ответ

3 голосов
/ 10 января 2012

Ваш метод enableRun никогда не вызывается из-за следующей строки:

JMenuItem newP = new JMenuItem("New");

Вместо этого рефакторинг как таковой,

newP = new JMenuItem("New");

Теперь поле будет правильно инициализировано и зарегистрировано как ActionListener. И, таким образом, при проверке источника будет вызван enableRun и пункт меню будет включен.

Обратите внимание, что в этом случае updateUI совершенно не требуется (я предлагаю вам прочитать javadoc, чтобы узнать его назначение).

...