2012-02-06 37 views
0

我不知道我在這裏做錯了什麼,或者甚至如何改進搜索來覆蓋這一點。搜索動態菜單更改會返回大量信息,但我沒有找到具體要查找的內容。我想根據數組的當前內容動態添加子菜單,並更改菜單的工具提示。作爲概念證明,我只是試圖改變菜單項actionListener中的工具提示。我認爲我遇到了DeleteTask名稱的範圍問題。當我嘗試在處理程序中使用它時,我得到一個錯誤,告訴我使用Final。當我這樣做,我得到'符號未找到'的錯誤。自從我使用Java編寫代碼以來,已經過去了幾個月,所以我可能會在一個或兩個概念上滑倒。如何從其自己的動作偵聽器中更改menuItem工具提示?

JMenuItem DeleteTask = new JMenuItem("Delete Task"); 
DeleteTask.setMnemonic(KeyEvent.VK_D); 
DeleteTask.setToolTipText("Delete a Task"); 
DeleteTask.addActionListener(new ActionListener() { 

public void actionPerformed(ActionEvent event) { 
    if(testCondition) 
    { 
    DeleteTask.setToolTipText("Changed Tool Tip");     
    } 
    else //testing 
    { 

    DeleteTask.setToolTipText("Delete a Task"); 
    } 

} 
}); 

任何人都可以解釋爲什麼這種方法不會讓我改變工具提示?我應該使用什麼方法來進行這些更改?任何搜索提示將非常感激。謝謝。

+2

它添加最後'最後的JMenuItem DeleteTask活動編譯後我沒有問題'頭腦的情況下,它的小寫'f' – wmz 2012-02-06 19:36:56

+0

你把最後的處理程序?它應該在變量聲明的最後JMenuItem DeleteTask ... – Thomas 2012-02-06 19:41:40

回答

3

不知道發生了什麼,還有必須在你的代碼中的另一個問題,但一切都可能是....只是猜測,我SSCCE

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class ActionExample { 

    private boolean testCondition = false; 
    private JMenuItem DeleteTask = new JMenuItem("Delete Task"); 

    public ActionExample() { 
     Action sample = new SampleAction(); 
     DeleteTask.setMnemonic(KeyEvent.VK_D); 
     DeleteTask.setToolTipText("Delete a Task"); 
     DeleteTask.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent event) { 
       if (testCondition) { 
        testCondition = false; 
        DeleteTask.setToolTipText("Changed Tool Tip"); 
       } else { 
        testCondition = true; 
        DeleteTask.setToolTipText("Delete a Task"); 
       } 
      } 
     }); 
     JMenu menu = new JMenu("Menu"); 
     menu.setMnemonic(KeyEvent.VK_M); 
     menu.add(sample); 
     menu.add(DeleteTask); 
     menu.addMenuListener(new SampleMenuListener()); 
     JToolBar tb = new JToolBar(); 
     tb.add(sample); 
     JTextField field = new JTextField(10); 
     field.setAction(sample); 
     JFrame f = new JFrame("ActionExample"); 
     JMenuBar mb = new JMenuBar(); 
     mb.add(menu); 
     f.setJMenuBar(mb); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.getContentPane().add(tb, BorderLayout.NORTH); 
     f.getContentPane().add(field, BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ActionExample actionExample = new ActionExample(); 
      } 
     }); 
    } 
} 

class SampleMenuListener implements MenuListener { 

    @Override 
    public void menuSelected(MenuEvent e) { 
     System.out.println("menuSelected"); 
    } 

    @Override 
    public void menuDeselected(MenuEvent e) { 
     System.out.println("menuDeselected"); 
    } 

    @Override 
    public void menuCanceled(MenuEvent e) { 
     System.out.println("menuCanceled"); 
    } 
} 

class SampleAction extends AbstractAction { 

    private static final long serialVersionUID = 1L; 

    public SampleAction() { 
     super("Sample"); 
     putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("alt S")); 
     putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_S)); 
     putValue(SHORT_DESCRIPTION, "Just a sample action"); 
    } 

    @Override 
    public void actionPerformed(ActionEvent evt) { 
     System.out.println("sample..."); 
    } 
} 
+0

+1在Mac OS上讀取得很好。 – trashgod 2012-02-06 22:31:22