Question

ont essayé quelques approches différentes pour cela, mais sans succès jusqu'à présent. Juste demandé si je me manque quelque chose. J'ai un JSpinner qui est un composant d'un widget dateSelector à côté d'un calendrier. Je suis en train de tirer une méthode de validation si l'utilisateur change de texte dans le JSpinner au lieu d'utiliser le contrôle du calendrier ou JSpinner flèches haut et bas.

Voici les différentes approches que j'ai essayé:

jSpinner1.addKeyListener(kl);

jSpinner1.getEditor().addKeyListener(kl);

((JSpinner.DefaultEditor) jSpinner1.getEditor().getTextField().addKeyListener(kl);

Quelqu'un là-bas a des idées sur ce que je fais mal? Merci

UPDATE Toutes mes excuses, j'aurais dit que je l'ai déjà ajouté un ChangeListener au JSpinnerDateModel qui est attaché à la JSpinner. Comme ceci:

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);

Merci

Frank

Était-ce utile?

La solution

JSpinners poignée KeyEvents eux-mêmes, mais ils tirent ChangeEvents au monde extérieur. Ajout d'un ChangeListener devrait vous permettre d'effectuer la validation que vous le souhaitez.

Voir aussi: Detecting Spinner Value Changes (Java Tutoriels)

Autres conseils

Si vous souhaitez désactiver la modification du clavier faire:

JFormattedTextField tf = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
tf.setEditable(false);

Pour écouter les événements clés que vous devez ajouter un écouteur au champ texte. Cela fonctionne pour moi:

((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) {                    
            }

        });

Ceci est un manque de swing, et à mon avis JSpinner devrait suivre JComboBox dans la fourniture de l'accès suivant au champ de texte sous-jacent:

JComboBox.getEditor().getEditorComponent()

De passer par la source de J1.7 je trouve que vous pouvez acheive à peu près la même chose avec

JSpinner.getEditor().getComponent(0)

Par conséquent, vous pouvez « pirater » l'auditeur de la manière suivante:

JSpinner.getEditor().getComponent(0).addKeyListener(...)

Il est évident que cela dépend de la «sous les couvertures de la mise en œuvre du swing et de travaux au J1.7, mais il n'y a aucune garantie que cela fonctionne pour d'autres versions futures ou passées.

Profitez.

EDIT

ou si l'éditeur est une instance de DefaultEditor, vous pouvez lancer en tant que tel et utilisation getTextField () '. Il serait utile si cela était défini dans l'interface.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top