Controls eines Formulars durchlaufen

Status
Nicht offen für weitere Antworten.

Toast78

Mitglied
Guden Tach!

Um zu überprüfen, ob alle Pflichtfelder gefüllt wurden, möchte ich gerne alle Controls eines JFrame-Formulars durchlaufen und ihren Namen überprüfen (Name wurde bereits eingetragen)

Code:
  /**
   * Überprüft die Pflichtfelder.
   * @param pflichtfelder Namen der Controls, die überprüft werden sollen.
   * @return false, wenn nicht in jedem Control Werte eingetragen wurden.
   */
  public boolean pruefePflichtfelder(String[] pflichtfelder, 
                                      Component control) {
    java.awt.Component[] controls = this.getComponents();
    boolean ergebnis = true;

    for (int i = 0; i < pflichtfelder.length && ergebnis; i++) {
      for (int j = 0; j < controls.length && ergebnis; j++) {
        if (controls[j].getName() != null) {
          if (controls[j].getName().equals(pflichtfelder[i])) {
            if (controls[j] instanceof javax.swing.JTextField) {
              if (((javax.swing.JTextField) controls[j]).getText().equals("")) {
                ergebnis = false;
                control = controls[j];
              }
            }
          }
        }
      }
    }
    
    return ergebnis;
  }
Naja, so hatte ich mir das jedenfalls vorgestellt. Dummerweise entält das Array controls nur ein Element. Erste Frage ist jetzt:
Wo finde ich den Container, in dem alle Controls abgespeichert sind?

Zweite Frage: Ich habe fast alle Controls zur Gruppierung in JPanels gepackt. Ergibt sich dadurch für mich ein Nachteil (falls es eine Lösung zur ersten Frage gibt)?

Danke schonmal fürs Lesen ;)
 

nocxsville

Bekanntes Mitglied
Mir persönlich wäre das Vorgehen zu aufwändig und vor allem zu anfällig. In welcher Klasse befindet sich denn die Methode? Im Panel oder in einer externen Klasse? Falls ja in welcher?

Gruß,
nocxsville.
 

Toast78

Mitglied
Mir wären 9-12 If-Anweisungen zu aufwändig. Und warum soll das zu anfällig sein? Klar, Felder, deren Überprüfung abhängig ist von anderen Feldern, kann man schlecht überprüfen. Aber ansonsten wüsste ich nicht, was daran anfällig sein sollte.

Die Methode befindet sich in der Formklasse und wird abgearbeitet beim Klicken auf einen JButton cmdSpeichern.
 
G

Guest

Gast
Code:
private void collectEmptyFields( Container container, List<JTextField> list )
{
  for( int i=0, n=container.getComponentCount(); i<n; i++ )
  {
     Component component = container.getComponent(i);
     // Nur aktive Komponenten holen
     if( component.isEnabled())
     {
        if( component instanceof JTextField )
        {
           JTextField textField = (JTextField)component;
           // Nur editierbare, leere Textfelder holen
           if( textField.isEditable() && 0 == textField.getText().trim().length() )
           {
              list.add(textField);
           }
        }
        else if( component instanceof Container )
        {
           // Container rekursiv durchgehen
           collectEmptyFields((Container)component, list);
        }
        // Alle anderen Komponenten ignorieren
     }
  }
}
 

Toast78

Mitglied
Ich bedanke mich erstmal für die Hilfe vom "Gast" :D
Die Prozedur war doch der Wink in die richtige Richtung. Komisch, dass Java bzw. NetBeans so verkorkste Strukturen aufbaut, damit man ein paar Controls anlegen kann.

Ich poste jetzt hier jetzt mal meine Version:
Code:
  /**
   * Überprüft die Pflichtfelder.
   * @param container Container, der die zu überprüfenden Controls enthält.
   * @param pflichtfelder Namen der Controls, die überprüft werden sollen.
   * Zur Überprüfung ist es erforderlich, dass die Eigenschaft name aller
   * Controls gesetzt wird.
   * @return Liefert das erste Pflichtfeld zurück, wenn es nicht gefüllt wurde
   */
  private Component pruefePflichtfelder(Container container, 
                                        String[] pflichtfelder) {
    Component ergebnis = null;
    int n = container.getComponentCount();
    
    for (int i = 0; i < n && ergebnis == null; i++) {
      Component component = container.getComponent(i);
      // Nur aktive Komponenten holen
      if (component.isEnabled()) {
        if (component instanceof JTextField) {
          JTextField textField = (JTextField) component;
          // Nur editierbare, leere Textfelder holen
          if (textField.isEditable() 
              && 0 == textField.getText().trim().length()) {
            for (int j = 0; j < pflichtfelder.length 
                && ergebnis == null; j++) {
              if (pflichtfelder[j].equals(textField.getName())) {
                ergebnis = textField;
              }
            }
          }
        } else if (component instanceof Container) {
           // Container rekursiv durchgehen
           ergebnis = pruefePflichtfelder((Container) component, 
               pflichtfelder);
        }
        // Alle anderen Komponenten ignorieren
      }
    }
    return ergebnis;
  }
Und so erfolgt der Aufruf:
Code:
pflichtControl = pruefePflichtfelder((Container) this.getComponent(0), new String[] {"Mitgliedsnummer"});
 

Toast78

Mitglied
Aaaarg! Ich bekomm die Krise! Funktionieren tut das ganze ja. Nur werden die Controls nicht in der Reihenfolge abgearbeitet, in der sie auch erstellt wurden.
 

WieselAc

Top Contributor
Einstellen kannst du das garnicht. Entweder du weißt in welcher reihenfolge du die Componenten geaddet hast, oder du musst dir einen komplett anderen Mechanismus überlegen (z.B eine Liste mit allen komponenten anlegen, verschachtelten check aufruf, etc...)
 

Toast78

Mitglied
Ich bedanke mich auch bei dir für deine Hilfe. :D

Dann doch lieber klickibunti MS-Access*. Ich weiß nicht, was die Leute an Microsoft-Produkten auszusetzen haben. Wenn ich so einen Scheiß sehe, könnte ich echt kotzen.

*Dummerweise ist der Teufel ein Eichhörnchen.
 

WieselAc

Top Contributor
nana wer wird sich den gleich aufregen, beim nächstenmal einfach direkt die Programmstruktur dementsprechend entwerfen und schon gehts :)
 

Toast78

Mitglied
So als Konsolensprache gehts ja. Nur ab der GUI-Programmierung wird Java, sagen wir, doch ein bisschen holprig. Schon allein was die Zuverlässigkeit des GUI-Editors betrifft.
 
G

Guest

Gast
Code:
List<JTextField> list = new ArrayList<JTextField>();
collectEmptyFields( container, list );
Collections.sort(list, irgendeinComparatorDerDieRichtigeReihenfolgeSicherstellt);

// und Akschn
;)
 

Toast78

Mitglied
@Unbekannter Gast: irgendeinComparatorDerDieRichtigeReihenfolgeSicherstellt
Haha, wie soll denn so ein Comparator aussehen? ???:L Mit Verlaub, aber wie soll man denn Controls von einander unterscheiden können, wenn nicht von ihrem Namen? Und dass die Controls nicht alphabetisch nach ihren Namen geordnet sind, kann MANCHMAL vorkommen. Zumal, ich will nicht irgend eine Liste abackern. Ich möchte das erste Control haben, das leer ist. Schließlich habe ich ja auch nur einen Fokus. Was sollte ich dann also mit den einer Liste von leeren Controls anfangen?

@WieselAC: Also ich habe vorhin mal die einzelnen JPanels (ich habe zusammengehörige Textfelder in einm JPanel zusammengefasst) mittels Sicherheitskopie rausgelöscht und wieder reinkopiert. Nur für ein Textfeld funktionierte das bisher nicht. Also habe ich die Textfelder aus diesem JPanel rausgeschmissen und dann wieder neu erstellt. Funktioniert immer nocht nicht. Dabei habe ich auch im Kontext-Menü den Eintrag "Change Order..." enthalten, aber auch dort war die Reihenfolge so eingestellt, wie ich sie gern hätte.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found AWT, Swing, JavaFX & SWT 14
J JavaFX Controls AWT, Swing, JavaFX & SWT 4
X Custom Controls AWT, Swing, JavaFX & SWT 5
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
wolfgang63 JavaFX Controls in einer BorderPane funktionieren nicht AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
K Controls in Controls / Nested fxml AWT, Swing, JavaFX & SWT 1
N Swing Dynamische Controls AWT, Swing, JavaFX & SWT 5
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
I Probleme mit GWT Controls unter Firefox AWT, Swing, JavaFX & SWT 14
T SWT/Eclipse Form Controls zur Laufzeit hinzufügen,GridLayout AWT, Swing, JavaFX & SWT 4
E JTable und Controls AWT, Swing, JavaFX & SWT 4
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
I Erstellung eines kleinen Programmes AWT, Swing, JavaFX & SWT 8
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
J Logikfehler im erstellen eines GUI AWT, Swing, JavaFX & SWT 3
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
C AWT die X koordinate eines Rectangles herrausfinden AWT, Swing, JavaFX & SWT 14
G 2D-Grafik Umrandung eines Winkels (drawArc(..)) AWT, Swing, JavaFX & SWT 4
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben