【发布时间】:2020-02-22 03:15:08
【问题描述】:
我正在尝试从特定框架 panel#1(仅包含一个 JButton)中删除并添加到其中包含一些 KeyEvents 的 panel#2。
我经常遇到 KeyEvent 无法注册的错误,但是当我测试一些东西时,我发现如果我不删除面板#1 并在框架顶部添加面板#2,仅当未选择面板#1 上的 JButton(仅通过按“TAB”)时,KeyListeners 才会注册。
有人可以帮我删除这个错误吗?
这是面板#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);
}
【问题讨论】:
-
我知道你建议我使用 KeyBinding,但我想问为什么会这样
-
是的,这是最好的解决方案,但这不是我要说的。我多次说明未生成关键事件的原因并为您提供了解决方案。阅读 cmets。我不应该重复自己 2 或 3 次。
标签: java swing jframe jpanel keylistener