我正在制作一个包含多个类的大型程序,并且遇到了我编写的一些代码问题。我的鼠标监听器工作正常并使用相同的步骤,我的键监听器没有。我的代码如下;
主要方法
public static void main(String[] args) {
window._init_(panel);
}
窗口初始化方法:
public void _init_(JPanel panel){
window = new JFrame("Asteroid");
window.setPreferredSize(size);
window.setDefaultCloseOperation(closeOpp);
window.add(panel);
window.getContentPane();
window.setResizable(resizable);
window.setFocusable(focusable);
window.pack();
window.setLocationRelativeTo(location);
window.setVisible(visibility);
}
面板初始化方法:
public MainPanel(){
//panel initialization
System.out.println("inside constructor");
panel = new JPanel();
this.add(panel);
this.addKeyListener(this);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setSize(Window.size);
this.setFocusable(Window.focusable);
this.add(b);
this.setVisible(Window.visibility);
}
小组监听方法
@Override
public void keyPressed(KeyEvent e) {
System.out.println("key pressed");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("key released");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouse clicked");
}
public void keyTyped(KeyEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
PS。该面板实现了所有使用过的侦听器,定义了所有变量,程序运行时没有错误
答案 0 :(得分:0)
您将焦点设置为框架而不是JPanel,但即使将焦点更改为JPanel也会提供一定程度的不可预测的行为,因为它很容易失去JPanel的焦点。我建议你使用Key Binding或更改你的keylistner方法和其他覆盖方法来附加到JFrame而不是JPanel,以确保在使用应用程序时保持焦点。