Ich erstelle in einer for-Schleife mehrere Textfelder.
Ich möchte nun dass ich die Textfelder auslesen kann und zwar alle die ich in verschiedener Anzahl erstellt habe.Danach soll dies in eine Liste eingetragen werden und in einer Tabelle soll zum schluss alles ausgegeben werden.
Mit dem befehl:
Java:
String eingabe=textfield.getText();
bekomme ich nur das letzte Textfeld. Ich brauche aber alle die ich erstellt habe!
Nun meine Fragen:
Wie kann ich die Textfelder auslesen?
Wie schreibe ich den Text aus den Textfeldern in eine Liste?
Wie gebe ich diese Liste in einer Tabelle aus?
Ich würde vorschlagen du lässt dir von deinem JFrame/Component alle Kinder mittels getComponents zurückgegeben. Dann prüfst du über instanceof, ob es sich hierbei um ein Textfeld handelt. Wenn du Panels ineinander schachtelst, musst du die Methode rekursiv umsetzten.
[EDIT] Alternativ könntest du die Textfelder natürlich auch direkt bei der Erstellung schon in einer Liste sammeln, auf welche du dann bei Bedarf zugreifen kannst.[/EDIT]
Hallo, erstmal danke für deine antwort. Leider bekomme ich das nicht so richtig hin wäre über weitere vorschläge sehr dankbar. ggf. auch Beispiele! MfG
OK...also ich habe jetzt versucht es so zu machen wie oben beschrieben....leider bekomme ich es nicht so richtig hin und verstehe es auch nicht wirklich :/ kannst du mir zeigen wie es anhand meines quelltextes auszusehen hat?
Alle Texte die du in einem Textfeld eingibts könntest du in einer Variable speichern und der methode addElementToList weitergeben. Die fügt es dann deiner Liste hinzu. Bitte berichtigen wenn ichs falsch aufgenommen hab
OK, ja das sieht vielversprechend aus. Aber ich bekomme es einfach nicht hin die Eingaben der Textfelder auszulesen und diese dann über deine geschriebene Methode in eine Liste einzufügen.
Am anfang steht ja "Name fŸr Spieler"+ spielerNummer" in allen Textfeldern.
Ich möchte dass ich dann erst den Text aus den Textfeldern nehme wenn ich auf den Button "Zur Tabelle" drücke.
Es muss sozusagen jede eingabe von jedem einzelnen Textfeld in eine nue Varable gespeichert werden und die muss dann der List hinzugefügt werden. Diese Liste soll es dann in einer Tabelle anzeigen.
Warum machst du es kompliziert, wenn es auch einfach geht?
Wenn du eine Liste an JTextField haben willst, dann definiere doch einfach eine Liste von JTextField(s).
Also:
Java:
List<JTextField> liste =newArrayList<JTextField>()
Du kannst so einfach ein TextFeld initialisieren in eine JComponenten adden und dann der Liste hinzufügen.
Also:
Java:
List<JTextField> liste =newArrayList<JTextField>()JTextField tf =newJTextField("text");this.add(tf);//Ich bin in deinem Beispiel das JFrame...
liste.add(tf);...
Über die Liste kannst du dann das JTextField ansprechen...
Wenn du dieses Element in der Liste änderst (z.B. tf.setText("asdlk")) wird dies automatisch in der UI mitgeändert...
Du könntest textfelder in deiner schleife mit verschiedenen "ids" anlegen spielernummer = id da du sont denk ich mal probleme bekommen wirst mit den jtextFields, diese anzusprechen.
Java:
publicclassSpielernameGUIextendsJFrame{privatestaticfinallong serialVersionUID =1L;int spielerAnz;privateVector eingaben;JTextField[] textFields;publicSpielernameGUI(String title,int spielerAnz){super(title);setSize(400,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.spielerAnz = spielerAnz;this.eingaben =newVector();createGUI();}privatevoidcreateGUI(){int spielerNummer;setLayout(newBoxLayout(getContentPane(),BoxLayout.Y_AXIS));for(int i =0; i < spielerAnz; i++){
spielerNummer = i +1;
textFields[spielerNummer]=newJTextField("Name für Spieler"+ spielerNummer);add(textFields[spielerNummer],Component.CENTER_ALIGNMENT);}JButton tableButton =newJButton("Zur Tabelle");
tableButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvent e){TableGUI tGUI =newTableGUI("Tabellenansicht");
tGUI.setVisible(true);for(int s =0; s < textFields.length; s++){String name = textFields[s].getText();addElementToList(name);}}});add(tableButton,Component.CENTER_ALIGNMENT);}publicvoidaddElementToList(String e){
eingaben.add(e);}JList ausgabeListe =newJList(eingaben);}
Oder wie grindelaner sagt :bae: die einzelnen Felder könntest dann mit dem jeweiligen index auslesen bei button druck
TextField in eine Map packen...
TextField in eine Klasse packen wo du noch mehr Attribute hinterlegen kannst....
TextField direkt über JComponent ansprechen.... (Nicht so gut )
...