Domanda

Per inizializzare tutti i JTextfField su un JPanel quando gli utenti fanno clic su un pulsante "cancella", devo scorrere il JPanel (anziché impostare tutti i singoli campi su " ").

Come posso usare un ciclo for-each per scorrere attraverso JPanel alla ricerca di JTextField s?

È stato utile?

Soluzione

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}

Ma se hai JTextFields più profondamente annidato, puoi utilizzare il seguente modulo ricorsivo:

void clearTextFields(Container container) {
    for (Component c : container.getComponents()) {
        if (c instanceof JTextField) {
           ((JTextField)c).setText("");
        } else
        if (c instanceof Container) {
           clearTextFields((Container)c);
        }
    }
}

Modifica: Un esempio per il suggerimento di Tom Hawtin - tackline sarebbe quello di avere un elenco nella tua classe di frame:

List<JTextField> fieldsToClear = new LinkedList<JTextField>();

e quando si inizializzano i singoli campi di testo, aggiungerli a questo elenco:

someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }

e quando l'utente fa clic sul pulsante Cancella, basta:

for (JTextField tf : fieldsToClear) {
    tf.setText("");
}

Altri suggerimenti

Mentre un'altra risposta mostra un modo diretto per risolvere il tuo problema, la tua domanda implica una soluzione scadente.

Generalmente vogliono che le dipendenze statiche tra i layer siano a senso unico. Dovresti andare in un pacchetto attraverso getCommponents . Casting (assumendo generici) è un modo semplice per vedere che qualcosa è andato storto.

Quindi, quando si creano i campi di testo per un modulo, aggiungerli all'elenco da cancellare in un'operazione di cancellazione, nonché aggiungerli al pannello. Naturalmente nel codice reale probabilmente ci sono altre cose che vuoi fare anche a loro. Nel vero codice probabilmente vorrai avere a che fare con modelli (possibilmente Document ) piuttosto che JComponent s.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top