簡體   English   中英

按下Enter鍵時JSpinner不會轉移焦點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM