【问题标题】:Creating shortcuts for JMenuItems in JPopupMenu在 JPopupMenu 中为 JMenuItems 创建快捷方式
【发布时间】:2012-12-29 11:07:55
【问题描述】:

我需要 JPopupMenu 中的 JMenuItems 的快捷方式。 在下面给出的代码中,快捷方式不起作用。

import java.awt.event.*;
import javax.swing.*;
import static java.awt.event.InputEvent.CTRL_DOWN_MASK;

public class test3 implements ActionListener {

    JPopupMenu pop;

    void gui() {
        JFrame f = new JFrame();

        pop = new JPopupMenu();
        JMenuItem it1 = new JMenuItem("new");
        JMenuItem it2 = new JMenuItem("old");
        it1.setAccelerator(KeyStroke.getKeyStroke('N', CTRL_DOWN_MASK));
        it2.setAccelerator(KeyStroke.getKeyStroke('O', CTRL_DOWN_MASK));
        it1.addActionListener(this);
        it2.addActionListener(this);
        pop.add(it1);
        pop.add(it2);
        JTextArea ta = new JTextArea(20, 40);
        ta.add(pop);

        ta.addMouseListener(new MouseAdapter() {

            public void mousePressed(MouseEvent me) {
                if (me.isPopupTrigger()) {
                    pop.show(me.getComponent(), me.getX(), me.getY());
                }
            }

            public void mouseReleased(MouseEvent me) {
                if (me.isPopupTrigger()) {
                    pop.show(me.getComponent(), me.getX(), me.getY());
                }
            }
        });

        f.add(ta);
        f.pack();

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("new")) {
            System.out.println("new");
        } else if (ae.getActionCommand().equals("old")) {
            System.out.println("old");
        }

    }

    public static void main(String[] argv) {
        test3 t = new test3();
        t.gui();
    }
}

【问题讨论】:

  • 要格式化代码,您可以选择文本并单击看起来像花括号的图标:{}。您可以删除包含的 br 标记。
  • “不工作”是什么意思?
  • 当我按下 ctrl+n 时,它应该在 cmd 中打印新的,但它不是... 即 actionevent 没有发生。但是当我右键单击然后单击新的工作时。
  • 但是请花一些时间按照我上面的解释正确格式化您的代码。不要让它保持原样。
  • 当我尝试提交格式化的文件时出现错误。

标签: java swing jpopupmenu jmenuitem


【解决方案1】:

您发布的代码的唯一问题是语法错误。否则它正在工作。 CTRL_DOWN_MASK 是 KeyEvent 类中的常量,因此您需要说明:

    KeyEvent.CTRL_DOWN_MASK

所以该行应该是:

    it1.setAccelerator(KeyStroke.getKeyStroke('N', KeyEvent.CTRL_DOWN_MASK)); 

并从您的代码中删除静态导入行。这应该可以按预期编译和工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多