Frage

Um alle JTextfFields auf einem JPanel zu initialisieren, wenn Benutzer auf einen „Löschtaste“, muss ich durch die JPanel Schleife (statt alle einzelnen Bereich auf „“).

Wie kann ich ein for-Schleife, um jede durch die JPanel auf der Suche nach JTextFields iterieren?

War es hilfreich?

Lösung

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

Aber wenn Sie JTextFields tiefer verschachtelt haben, könnten Sie die folgende rekursive Form verwenden:

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

Edit: Eine Probe für Tom Hawtin - tackline Vorschlagsliste in Ihrer Rahmenklasse haben sei:

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

und wenn Sie die einzelnen Textfelder initialisieren, fügen Sie sie in dieser Liste:

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

und wenn der Benutzer klickt auf die Schaltfläche Löschen, nur:

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

Andere Tipps

Während eine andere Antwort eine direkte Art und Weise zeigt, Ihr Problem zu lösen, Ihre Frage ist eine schlechte Lösung impliziert.

wollen Allgemeinen statische Abhängigkeiten zwischen den Schichten ein Weg zu sein. Sie sollten eine Packung durch getCommponents gehen müssen. Casting (vorausgesetzt, Generika) ist ein einfacher Weg, um zu sehen, dass etwas schief gegangen ist.

Also, wenn Sie die Textfelder für ein Formular erstellen, fügen Sie sie in die Liste in einem klaren Betrieb gelöscht werden sowie sie auf den Panel hinzufügen. Natürlich in echten Code gibt es wahrscheinlich andere Dinge, die Sie zu ihnen zu tun. In echten Code möchten Sie wahrscheinlich mit Modellen (möglicherweise Document) statt JComponents zu tun haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top