2013-03-07 47 views
0

在任何時候按下回車鍵後,代碼波紋管應該將焦點轉移到下一個控件,事件會觸發,但.transferFocus不會轉移焦點,可能會出現什麼問題? 謝謝按下回車鍵後,JSpinner不會轉移焦點

//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對象上做一個Key Binding。 – camickr 2013-03-07 17:09:03

+0

您是否嘗試過'requestFocusInWindow()'(請參見[this](http://stackoverflow.com/questions/15223416/focus-on-component-when-a-panel-is-loaded/15223913#15223913)示例)vs 'transferFocus()'? – 2013-03-07 17:26:54

+0

它處於編輯模式下,除了過程「transferFocus()」以外的代碼工作,它運行時沒有錯誤,但不會將焦點轉移到下一個控件,焦點停留在JSpinner上。 – 2013-03-07 18:22:54

回答

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)); 
相關問題