2012-02-06 68 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

相关问题