Java KeyListener未在JSpinner上触发

Fra*_*ank 5 java swing keylistener listener jspinner

已经尝试了一些不同的方法,但到目前为止没有成功.只是想知道我是否遗漏了什么.我有一个JSpinner,它是一个DateSelector小部件的组件和一个日历.我试图在用户更改JSpinner中的任何文本而不是使用Calendar控件或JSpinner向上和向下箭头时触发验证方法.

以下是我尝试过的不同方法:

jSpinner1.addKeyListener(kl);

jSpinner1.getEditor().addKeyListener(kl);

((JSpinner.DefaultEditor) jSpinner1.getEditor().getTextField().addKeyListener(kl);
Run Code Online (Sandbox Code Playgroud)

那里的任何人都对我做错了什么有任何想法?谢谢

更新 道歉,我应该说我已经将一个ChangeListener添加到附加到JSpinner的JSpinnerDateModel.像这样:

ChangeListener changeListener = new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            dateChanged();
        }
    };

    jSpinnerDateModel.addChangeListener(changeListener);

    KeyListener keyListener = new KeyListener() {

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println(e.getKeyChar());
            dateChanged();
        }

        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

        }

    };
    ((JSpinner.DefaultEditor) jSpinner1.getEditor()).getTextField().addKeyListener(
            keyListener);
Run Code Online (Sandbox Code Playgroud)

谢谢

坦率

dog*_*ane 13

如果要禁用键盘编辑,请执行以下操作:

JFormattedTextField tf = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
tf.setEditable(false);
Run Code Online (Sandbox Code Playgroud)

要侦听关键事件,您需要在文本字段中添加侦听器.这对我有用:

((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().addKeyListener(new KeyListener(){

            @Override
            public void keyPressed(KeyEvent e) {                    
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("PRESSED!");                    
            }

            @Override
            public void keyTyped(KeyEvent e) {                    
            }

        });
Run Code Online (Sandbox Code Playgroud)


Mic*_*ers 2

JSpinners 自己处理 KeyEvents,但它们向外界触发 ChangeEvents。添加 ChangeListener 应该允许您执行您希望的验证。

另请参阅:检测微调器值更改(Java 教程)