2012-01-10 2 views
1

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

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

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"); 
     } 
    } 

}

ответ

3

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

JMenuItem newP = new JMenuItem("New"); 

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

newP = new JMenuItem("New"); 

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

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

+0

Aha! Рад, что это была глупая ошибка, а не фундаментальное недоразумение! Спасибо :) – thisisnic

+0

для основного материала +1 – mKorbel

 Смежные вопросы

  • Нет связанных вопросов^_^