[英]JSpinner does not transfer focus when pressing Enter
在下面的代碼中,應隨時按Enter鍵將焦點轉移到下一個控件,事件將觸發,但.transferFocus沒有轉移焦點,這可能是什么問題? 謝謝
//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");
您可以創建一個自定義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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.