gpt4 book ai didi

java - JPopupMenu 错误,未选择或关闭

转载 作者:行者123 更新时间:2023-11-30 05:11:16 26 4
gpt4 key购买 nike

好吧,这就是我的问题:

我正在使用一个应用程序,该应用程序创建一个其中包含 JTree 的对话框。当有人右键单击 JTree 时,我需要确定它是否在 2010 文件夹中。如果是的话,我需要创建一个弹出菜单,其中包含一个选项:“迁移到 2011”。

我现在遇到的是,我弹出带有正确文本的菜单,并在单击它或单击关闭时关闭。但是,当我单击“迁移到 2011”时,没有任何反应,它不会运行我的 ActionPerformed,并且在对话框窗口的顶部出现奇怪的闪烁。

我创建了一个新类来尝试诊断问题,但遇到了一个新问题。这是我为了尝试找出问题所在而制作的副类,当我运行它时,它填充得很好并打开了菜单项。但是,当您单击菜单选项时,它实际上并没有关闭菜单,而是仅运行 ActionPerformed 方法,而不运行其他任何内容。

这是代码示例:

//Import statements

public class MainClass extends JPanel {

public MainClass() {
final JPopupMenu popup = new JPopupMenu();
final JTree tree;
final JTextField jtf;

JMenuItem menuItem = new JMenuItem("Migrate to 2011");
ActionListener actionlistener = new PopupActionListener();
menuItem.addActionListener(actionlistener);
popup.add(menuItem);

DefaultMutableTreeNode top = new DefaultMutableTreeNode("Options");

DefaultMutableTreeNode a = new DefaultMutableTreeNode("A");
top.add(a);
DefaultMutableTreeNode a1 = new DefaultMutableTreeNode("A1");
a.add(a1);
DefaultMutableTreeNode a2 = new DefaultMutableTreeNode("A2");
a.add(a2);

DefaultMutableTreeNode b = new DefaultMutableTreeNode("B");
top.add(b);
DefaultMutableTreeNode b1 = new DefaultMutableTreeNode("B1");
b.add(b1);
DefaultMutableTreeNode b2 = new DefaultMutableTreeNode("B2");
b.add(b2);
DefaultMutableTreeNode b3 = new DefaultMutableTreeNode("B3");
b.add(b3);

tree = new JTree(top);

JScrollPane jsp = new JScrollPane(tree);

add(jsp, BorderLayout.WEST);

jtf = new JTextField("", 20);
add(jtf, BorderLayout.EAST);

tree.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent ae) {
popup.setVisible(false);
TreePath tp = tree.getPathForLocation(ae.getX(), ae.getY());
if (tp != null)
jtf.setText(tp.toString());
else
jtf.setText("");

if(SwingUtilities.isRightMouseButton(ae)){
popup.setLocation(ae.getLocationOnScreen());
popup.setVisible(true);
}
}
});

}

class PopupActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
System.out.println("it works!");
}
}

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new MainClass());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 450);
frame.setVisible(true);
}
}

最佳答案

显示JPopupMenu的正确方法是使用其show方法。看看API :

除此之外,我建议使用 Actions 而不是简单的操作监听器。它们更加灵活,不仅可以在菜单上使用,还可以在工具栏等上使用。以下是有关操作的一些内容:

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/misc/action.html

关于java - JPopupMenu 错误,未选择或关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com