2014-02-08 2 views
0

Так что это мой код:KeyPressed событие для любого элемента панели

public void keyPressed(KeyEvent ke){ 
    int keyID = ke.getKeyCode(); 
    Object o = ke.getSource(); 

    if (keyID == KeyEvent.VK_ENTER){ 
     if(o.equals(GUI.btnOK)){ 
      //Do something 
     } 
    }}} 

Итак, что это делает // Сделайте что-нибудь, когда JButton называется btnOK доступен через клавишу ENTER .

Вопрос: Как разместить o.equals(GUI.btnOK), чтобы активировать его при вводе, когда ничего Элемент главной панели нажат?

У этого есть несколько вещей, и btnOK является одним из них. Моя главная панель:

pnlMain= new JPanel(null); 

Я попытался:

if (keyID == KeyEvent.VK_ENTER){ 
      if(o.equals(GUI.pnlMain)){ 
       //Do something 
      } 
     } 

Но это не похоже на работу, несмотря на то, что я сделал добавить событие в главной панели.

Пример:

if (keyID== KeyEvent.VK_ESCAPE){ 
if(o.equals(GUI.txtLogin) || o.equals(GUI.pwfPWD) || o.equals(GUI.btnOK)){ 
    //Do this 
    igu.setVisible(false); 
    igu.dispose(); 
    System.exit(0); }} 

Вместо размещения всех кнопок можно получить вызваны ПОБЕГ в if(o.equals(whatever)|| etc... Я хочу, чтобы это было доступно (кнопка побег нажата) для всякий раз, когда программа открыта везде в центре внимания.

+0

У вас есть: если (KeyId == KeyEvent.VK_ENTER) и вы ожидаете, что программа для ввода, что если положение без нажатия клавиши ENTER? – pedromss

+0

Я хочу, чтобы он «// Делал что-то», где бы я ни вводил элемент внутри JPanel ... менял «// DO something» на: \t \t \t \t GUI.setVisible (false); GUI.dispose(); System.exit (0); – Alpha2k

+1

Для Swing обычно используют привязки клавиш на уровне AWT, нижнем уровне, 'KeyListener'. Подробнее о том, как их использовать, см. [Как использовать привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html). Они звучат идеально для этого. –

ответ

3

Может быть, вы ищете что-то вроде этого:

// Вы можете привязать ключ к JComponent, поэтому всякий раз, когда вы нажимаете на ENTER «JComponent it does desired operation say Transfer Focus to next JComponent`, как:

jComponent.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus"); 
jComponent.getActionMap().put("TransferFocus", action); 

// вы можете привязать ключ к JButton, поэтому всякий раз, когда вы нажимаете на ENTER «JButton it does desired operation say Click the JButton`, как:

jButton.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "DoClick"); 
jButton.getActionMap().put("DoClick", action); 

// действие

AbstractAction action = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() instanceof JButton){ 
     JButton button = (JButton) e.getSource(); 
     button.doClick();   
     } else if(e.getSource() instanceof JComponent){ 
      JComponent component = (JComponent) e.getSource(); 
      component.transferFocus(); 
     } 
    } 
    };