请看我的示例代码。
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 添加到弹出窗口。弹出菜单将支持从一个项目移动到另一个项目。
阅读 Bringing Up a Popup Menu 上的 Swing 教程部分获取更多信息和示例。
use it's key pressed even to re-populate the pop-up.
您应该在弹出窗口可见之前设置弹出窗口的项目。
Adding key listener to JPopupMenu from a JTextPane works, but not from JTextArea
然后发一个SSCCE演示了工作代码和非工作代码。如果我们了解您的意图,那么我们或许能够为这两个组件提供更好的替代方案。
关于java - 从 JTextPane 将关键监听器添加到 JPopupMenu 可以,但不能从 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428627/