Java 如何从自己的操作侦听器更改menuItem工具提示?
我不知道我在这里做错了什么,甚至不知道如何改进搜索以涵盖这一点。搜索动态菜单更改会返回大量信息,但我没有找到我要查找的内容。我想根据数组的当前内容动态添加子菜单,并更改菜单的工具提示。作为概念证明,我只是尝试更改菜单项actionListener中的工具提示。我想我遇到了DeleteTask名称的范围问题。当我试图在处理程序中使用它时,我得到一个错误,告诉我使用Final。当我这样做时,我会得到一个“未找到符号”错误。我已经几个月没有使用Java编写代码了,所以我可能会在一两个概念上失言Java 如何从自己的操作侦听器更改menuItem工具提示?,java,swing,dynamic,menu-items,Java,Swing,Dynamic,Menu Items,我不知道我在这里做错了什么,甚至不知道如何改进搜索以涵盖这一点。搜索动态菜单更改会返回大量信息,但我没有找到我要查找的内容。我想根据数组的当前内容动态添加子菜单,并更改菜单的工具提示。作为概念证明,我只是尝试更改菜单项actionListener中的工具提示。我想我遇到了DeleteTask名称的范围问题。当我试图在处理程序中使用它时,我得到一个错误,告诉我使用Final。当我这样做时,我会得到一个“未找到符号”错误。我已经几个月没有使用Java编写代码了,所以我可能会在一两个概念上失言 JMe
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");
}
}
});
有人能解释一下为什么这个方法不允许我更改工具提示吗?我应该使用什么方法进行这些更改?任何搜索提示都将不胜感激。谢谢。不确定发生了什么,您的代码中肯定还有其他问题,但一切都可能是。。。。只有猜测,我的朋友
不确定发生了什么,您的代码中肯定有另一个问题,但一切都可能是。。。。只有猜测,我的朋友
在添加final
final JMenuItem DeleteTask
Mind case之后,它为我编译没有问题,它是小写的f
您在处理程序中放final了吗?它应该在变量声明final JMenuItem DeleteTask中运行…在添加finalfinal JMenuItem DeleteTask之后,它为我编译没有问题。注意,它是小写的f
你在处理程序中放final了吗?它应该在变量声明的最后一个JMenuItem DeleteTask。。。
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...");
}
}