KeyEvent 从不触发(java Swing)
KeyEvent never fires (java Swing)
目前我正在尝试将键盘支持添加到我的项目中,但我遇到了无线问题。我的听众没有捕捉到任何事件。我用代码做了简单的打印,但什么也没发生。我以前从来没有遇到过这样的问题。
这是我的class GUI:
public class GUI extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private ComponentAbstract korzen;
private GUI self;
public GUI() {
self=this;
this.stworz_PanelLogowania();
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("typed");
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("pressed");
}
});
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
korzen.tryClick(e.getX(), e.getY());
repaint();
}
});
this.repaint();
}
@Override
protected void paintComponent(Graphics g ) {
super.paintComponent(g);
korzen.repaint();
System.out.println("omatko");
korzen.draw((Graphics2D)g);
}
private void zmien_panel(ComponentAbstract newkorzen){
korzen=newkorzen;
self.repaint();
}
private void stworz_PanelLogowania(){
LinearPanel lp=new LinearPanel(220, 50, 300, 300);
//lp.setOrientarion(Orientation.VERTICAL);
lp.addComponent(new Label(0, 0, 350, 40, "Witamy w castorama APP"));
lp.setPadding(2);
lp.addComponent(new TextBox(0, 0, 350, 40));
korzen=lp;
System.out.println("kuniec");
}
}
有趣的是鼠标侦听器工作完美。
编辑:之前有 KeyAdapter 但结果是一样的。
KeyEvents 只发送给有焦点的组件。默认情况下,JPanel 不可聚焦,因此它不会接收 KeyEvents。
在构造函数中你需要使用:
setFocusable(true);
然后,根据应用程序的其余部分,当您切换到面板时,面板现在可以接收焦点。
目前我正在尝试将键盘支持添加到我的项目中,但我遇到了无线问题。我的听众没有捕捉到任何事件。我用代码做了简单的打印,但什么也没发生。我以前从来没有遇到过这样的问题。
这是我的class GUI:
public class GUI extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private ComponentAbstract korzen;
private GUI self;
public GUI() {
self=this;
this.stworz_PanelLogowania();
this.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("typed");
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("pressed");
}
});
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
korzen.tryClick(e.getX(), e.getY());
repaint();
}
});
this.repaint();
}
@Override
protected void paintComponent(Graphics g ) {
super.paintComponent(g);
korzen.repaint();
System.out.println("omatko");
korzen.draw((Graphics2D)g);
}
private void zmien_panel(ComponentAbstract newkorzen){
korzen=newkorzen;
self.repaint();
}
private void stworz_PanelLogowania(){
LinearPanel lp=new LinearPanel(220, 50, 300, 300);
//lp.setOrientarion(Orientation.VERTICAL);
lp.addComponent(new Label(0, 0, 350, 40, "Witamy w castorama APP"));
lp.setPadding(2);
lp.addComponent(new TextBox(0, 0, 350, 40));
korzen=lp;
System.out.println("kuniec");
}
}
有趣的是鼠标侦听器工作完美。 编辑:之前有 KeyAdapter 但结果是一样的。
KeyEvents 只发送给有焦点的组件。默认情况下,JPanel 不可聚焦,因此它不会接收 KeyEvents。
在构造函数中你需要使用:
setFocusable(true);
然后,根据应用程序的其余部分,当您切换到面板时,面板现在可以接收焦点。