我试图从特定的框架中删除面板#1(仅包含一个JButton),并向其中添加面板#2,其中包含一些KeyEvent。
我经常遇到一个错误,该错误不会注册KeyEvent,但是当我进行一些测试时,我发现如果我不删除panel#1并在该帧的顶部添加panel#2,只有在未选择面板#1上的JButton时(仅通过按“ TAB”),KeyListener才会注册。
有人可以帮助我删除此错误吗?
这是面板#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) {}
}
这是Main类:
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);
}
答案 0 :(得分:-1)
我设法解决了这个问题,谢谢大家: 解决此问题的一种方法是使用以下方法使JButton不可聚焦:
const solution = (values) => {
values.sort( (a, b) => a-b ); // sort numerically, not lexically
let smallest = 1; // default smallest positive integer
values.some( value =>
// ignore negative numbers
// find the smallest integer not in the array
value > 0 ? (value > smallest ? true : (smallest = value + 1) && false) : false
);
return smallest;
}
这样,JButton不会被聚焦和标记,但是仍然,当进入Panel#2时,您将需要按“ TAB”再次聚焦在新的Panel上,并且可以使用该java.awt.Robot :
.setfocusable(false);