从JTextPane向JPopupMenu添加键侦听器是可行的,但从JTextArea则不行



请参阅我的示例代码。

JPopupMenu popUp = new JPopupMenu();
popUp.add(new JMenuItem("sample1"));
popUp.add(new JMenuItem("sample2"));
popUp.addKeyListener(new KeyListener() {
    @Override
    public void keyTyped(KeyEvent e) {
        System.out.println("yy");
    }
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("yy");
    }
    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("yy");
    }
});
popUp.setVisible(true);
popUp.show(textPane, 0, 0);
popUp.requestFocus();

当使用JTextArea作为弹出窗口的父组件时,相同的代码不起作用。我的逻辑是在弹出窗口上添加焦点,然后使用它的按键甚至重新填充弹出窗口。

我真的不确定你想做什么。你不需要在弹出窗口中添加KeyListener。弹出菜单将支持从一个项目移动到另一个项目。

阅读Swing教程中关于弹出菜单的部分,了解更多信息和示例。

使用它的按键,甚至可以重新填充弹出窗口。

在弹出窗口可见之前,您应该设置弹出窗口的项目。

从JTextPane向JPopupMenu添加键侦听器有效,但从JTextArea 不起作用

然后发布一个SSCCE,演示工作代码和非工作代码。如果我们了解您正在尝试做什么,那么我们可能能够为这两个组件提供更好的替代方案。

以下内容适用于我。你能详细说明弹出逻辑的重新填充吗?

 JPopupMenu popUp = new JPopupMenu();
    popUp.add(new JMenuItem("sample1"));
    popUp.add(new JMenuItem("sample2"));
    popUp.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
            System.out.println("yy");
        }
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println("yy");
        }
        @Override
        public void keyReleased(KeyEvent e) {
            System.out.println("yy");
        }
    });
    JFrame f = new JFrame();
    JTextArea txtArea = new JTextArea();
    f.add(txtArea);
    f.setSize(300, 150);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
    popUp.setVisible(true);
    popUp.show(txtArea, 0, 0);
    popUp.requestFocus();

相关内容

最新更新