2012-01-10 71 views
1

我想創建一個默認禁用的JMenuItem,但可以調用一個方法來啓用它。就在我測試我的代碼的同時,我希望在單擊另一個菜單項時調用該方法。我看了一下JMenuItem的文檔,但是我對Java很新,而且我很難找到我需要的東西。我試過使用updateUI()命令,但我沒有工作,所以我完全卡住了。在此先感謝您的幫助:)通過ActionListener更新JMenuItem

這是我到目前爲止有:

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

啊哈!很高興這是一個愚蠢的錯誤,而不是根本的誤解!謝謝:) – thisisnic 2012-01-10 15:17:41

+0

爲基本的東西+1 – mKorbel 2012-01-10 15:20:52