Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    JTextField e KeyListener: problema con "Taglia"

    Ho una serie di JTextComponent che l'utente deve riempire. Una volta che sono tutte "piene" si deve attivare il bottone di salvataggio.

    Per fare questo ho creato questo piccolo listener:

    codice:
            class ValidatorListener extends KeyAdapter {
                private JTextComponent[] components = new JTextComponent[4];
    
                ValidatorListener() {
                    components[0] = (JTextComponent) categoriesComboBox.getEditor().getEditorComponent();
                    components[1] = nameTextField;
                    components[2] = tagsTextField;
                    components[3] = codeEditor;
                }
    
                public void keyTyped(KeyEvent e) {
                    boolean enabled = true;
    
                    for (JTextComponent c : components) {
                        enabled &= (c.getText() + (e.getSource() == c ? e.getKeyChar() : "")).trim().length() != 0;
                    }
    
                    saveButton.setEnabled(enabled);
                }
            }
    In pratica ad ogni nuovo tasto premuto controllo se è tutto ok ed eventualmente attivo il bottone.

    1. Così com'è ora non mi sembra granchè... Come potrei renderlo migliore?
    2. Problema "grave": se il contenuto di uno dei JTextComponent viene tagliato (CTRL/COMMAND + X) il bottone rimane attivo quando invece dovrebbe disabilitarsi. Se cancello con il backspace invece nessun problema. Come potrei risolvere questo problema?

    Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JTextField e KeyListener: problema con "Taglia"

    Originariamente inviato da Alex'87
    1. Così com'è ora non mi sembra granchè... Come potrei renderlo migliore?
    2. Problema "grave": se il contenuto di uno dei JTextComponent viene tagliato (CTRL/COMMAND + X) il bottone rimane attivo quando invece dovrebbe disabilitarsi. Se cancello con il backspace invece nessun problema. Come potrei risolvere questo problema?
    La soluzione è: DocumentListener! Vedi Document e il suo metodo addDocumentListener().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: JTextField e KeyListener: problema con "Taglia"

    Originariamente inviato da andbin
    La soluzione è: DocumentListener! Vedi Document e il suo metodo addDocumentListener().
    Grazie per la dritta! Sono andato a documentarmi ed ho scritto questa piccola classe:

    codice:
    package com.javastaff.alessandro.jcodecollector.gui.document;
    
    import javax.swing.JButton;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.text.JTextComponent;
    
    public class EditorValidatorListener implements DocumentListener {
        private JTextComponent[] components;
        private JButton button;
    
        public EditorValidatorListener(JTextComponent[] components, JButton button) {
            this.components = components.clone();
            this.button = button;
        }
    
        public void changedUpdate(DocumentEvent e) {
            check();
        }
    
        public void insertUpdate(DocumentEvent e) {
            check();
        }
    
        public void removeUpdate(DocumentEvent e) {
            check();
        }
    
        private void check() {
            boolean enabled = true;
    
            for (JTextComponent c : components) {
                enabled &= c.getDocument().getLength() > 0;
            }
    
            button.setEnabled(enabled);
        }
    }
    Ho fatto alcuni test e sembra funzionare correttamente! Grazie and
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.