2015-11-07 2 views
0

в данный момент я пытаюсь добавить в свой проект Поддержка клавиатуры, и у меня есть проблема с wird. Мой слушатель не поймал никаких событий. Я сделал простые отпечатки в коде, но ничего не происходит. Раньше у меня никогда не было такой проблемы.KeyEvent никогда не срабатывает (java Swing)

Это мой класс 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, но результат был тот же.

ответ

1

KeyEvents отправляются только компоненту с фокусом. По умолчанию JPanel не настраивается, поэтому он не получит KeyEvents.

В конструкторе вы должны использовать:

setFocusable(true); 

Затем в зависимости от остальной части приложения панель теперь может получить фокус при закладке на панели.

Смежные вопросы