java - 为什么选择 JButton 时 KeyListener 不起作用?
问题描述
我正在尝试从特定框架面板#1(仅包含一个 JButton)中删除并添加到面板#2,其中包含一些 KeyEvent。
我经常遇到 KeyEvents 无法注册的错误,但是当我测试一些东西时,我发现如果我不删除 panel#1 并在框架顶部添加 panel#2,KeyListeners 将注册,仅当没有选择面板#1 上的 JButton 时(仅通过按“TAB”)。
有人可以帮我删除这个错误吗?
这是面板#2:
public class paintTest extends JPanel implements KeyListener
{
public paintTest(){
addKeyListener(this);
setFocusable(true);
}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
}
这是主类:
public static void main(String[] args)
{
JFrame mainMenu = new JFrame();
drawMainMenu(mainMenu);
mainMenu.setVisible(true);
mainMenu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void drawMainMenu(JFrame frame)
{
frame.setBounds(0, 0, 360, 300);
frame.setLocationRelativeTo(null);
JPanel panel = new JPanel();
frame.add(panel);
JButton newGame = new JButton();
newGame.setBounds(130, 120, 100, 30);
newGame.setText("NEW GAME");
newGame.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent arg0)
{
paintTest gamePlay = new paintTest();
// frame.remove(panel); **HERE IS THE LINE OF CODE I WANT TO REMOVE**
frame.add(gamePlay);
frame.setBounds(0,0,512,512);
frame.setLocationRelativeTo(null);
}
});
panel.setLayout(null);
panel.add(newGame);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
解决方案
我设法修复它,谢谢大家:解决这个问题的一种方法是使用以下方法使 JButton 不可聚焦:
.setfocusable(false);
这样 JButton 将不会被聚焦和标记,但是,当进入 Panel#2 时,您仍需要按“TAB”以再次关注新面板,并且可以使用 java.awt.Robot:
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
} catch (AWTException e) {
e.printStackTrace();
}
推荐阅读
- r - Kolmogorov-Smirnov 检验和加权数据
- javascript - Hackerrank Kangroo Problem- Return not working (undefined)
- r - 使用 pracma::findpeaks 检测具有两个相邻相同值的峰值
- node.js - “ENOENT:在具有纱线工作空间的 monorepo 中没有这样的文件或目录
- c# - c# textbox text 转换东西
- python - 与 2 类分类中的 score = 'roc_auc' 相比,roc_auc 分数的自定义 make_scorer 给出了不同的结果
- php - PHP 警告:PHP 启动:无法加载动态库“intl”错误
- r - R:创建列显示在另一列中达到最大值之前/之后的天数?
- python-3.x - 有没有办法只从列表中列出某种格式的文本?
- python-3.x - 如何在 selenium python 中只获取标签文本而不是跨文本?