2013-03-07 4 views
0

Код, приведенный ниже, должен был перенести фокус на следующий элемент управления после нажатия клавиши Enter в любое время, событие срабатывает, но .transferFocus не передает фокус, что может быть неправильным? СпасибоJSpinner не передает фокус при нажатии Enter

//JSpinner Creation Code: 
private javax.swing.JSpinner edtStockMax; 
edtStockMax = new javax.swing.JSpinner(); 
edtStockMax.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); 

//Code to bind the Enter key 
JSpinnerField1.getActionMap().put("enter-action", new AbstractAction("enter-action") 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       System.out.println("Transfer focus inside JSpinner"); 
       field.transferFocus(); 
      } 
     }); 

     JSpinnerField1.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) 
     .put(KeyStroke.getKeyStroke("ENTER"), "enter-action"); 
+0

Если счетчик не находится в режиме редактора, редактор не отображается, поэтому он не будет получать события. Я бы предположил, что вам также необходимо выполнить привязку клавиш к объекту JSpinner. – camickr

+0

вы попробовали 'requestFocusInWindow()' (см. [This] (http://stackoverflow.com/questions/15223416/focus-on-component-when-a-panel-is-loaded/15223913#15223913) пример) vs 'transferFocus()'? –

+0

Он находится в режиме редактора, код выше работает, за исключением процедуры «transferFocus()», он работает без ошибок, но не передает фокус на следующий элемент управления, фокус остается на JSpinner. –

ответ

0

Вы можете сделать заказ NumberEditor (внутренний) класс для обработки изменения фокуса. Вот образец одного класса:

class CustomNumberEditor extends JSpinner.NumberEditor implements KeyListener{ 

     private JFormattedTextField textField; 

     public CustomNumberEditor(JSpinner spinner){ 
      super(spinner); 
      textField = getTextField(); 
      textField.addKeyListener(this); 
     } 

     @Override 
     public void keyTyped(KeyEvent e) { 
     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      if (e.getKeyCode() == KeyEvent.VK_ENTER){ 
       textField.transferFocus(); 
      } 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
     } 
    } 

Вы должны установить его как свой собственный редактор. Вот код:

final JSpinner edtStockMax = new JSpinner(); 
edtStockMax.setModel(new SpinnerNumberModel(0, 0, 100, 10)); 
edtStockMax.setEditor(new CustomNumberEditor(edtStockMax)); 

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

  • Нет связанных вопросов^_^