Textfelder auslesen

Freaky1

Mitglied
Hi Leute,

hab mal ne Frage:

ich lasse mir mit folgendem Code ein paar Textfelder erstellen:

Java:
		for(int i = 0;i<anzTextFields;i++){
			textFields[i] = new JTextField();
			textFields[i] = aGUI.createTextField(textFieldSize, frame, locTextFieldX, locTextFieldY, anzTextFields, absTextFields);
			locTextFieldY = locTextFieldY + absTextFields;
		}

der Code zu a.GUI.createTextField sieht so aus:

Java:
	public JTextField createTextField(Dimension size, JFrame frame, int x, int y,int anzTextFields, int Abstand){
			JTextField Info = new JTextField();
			Info.setLocation(x, y);
			Info.setSize(size);
			frame.add(Info);
			return Info;
	}

jetzt ist meine Frage: ich möchte nachdem ich die Textfelder erstellt habe auf den Inhalt der Textfelder zugreifen. Hier der ActionListener zum jeweiligen Button:

Java:
	public void createButton(final String[] name, Dimension size, final JFrame frame, int x, int y,int anzButtons){
		for(int i = 0;i<anzButtons;i++){
			JButton Verkauf = new JButton(name[i]);
			Verkauf.setSize(size);
			Verkauf.setLocation(x, y);
			final int t = i;
	 		Verkauf.addActionListener(new ActionListener(){
				 public void actionPerformed(ActionEvent e){
                                        ...
 					 else if(name[t].equals("neuen Eintrag speichern")){
						 //nachdem dieser ActionListener betätigt wurde, sollen die Daten in den Textfeldern gespeichert werden.
						 	
					 }
				 }
			 });
			frame.add(Verkauf);
			y = y + 50;
		}
	}

Ich kriegs aber nicht hin. Wer kann mir helfen?

Danke im voraus...

Euer Freaky
 
Wenn du dich ein bischen mehr mit Java selber auseinandersetzen würdest, würdest du einen Blick ins Javadoc werfen und dort nach Methoden suchen die mit set anfangen.

-> setText( String string );
 
Sorry hab falsch gefragt. Die frage ist wie ich die Datensätze zwischen den Klassen austauschen soll? Die Methode createTextfield und createButton sind in der selben klasse, aber die erste for-Schleife in meinem ersten Post ist in ener anderen klasse.
 
Setzt dich lieber mal mit dem Thema Layoutmanager auseinander, dann kannst du dir solche umständlichen Methoden Sparen.
 
Lass sie unternander erben und setzt die Button static.

Wenn ich es richtig verstanden habe, dass du von einer anderen Klasse aus einen Button oder Texfield ändenr willst.

mfg

JDKarl
 
Hallo,

also ich habe eine Klasse die heißt createGUI. In dieser Klasse ist die Methode createTextField() und createButton() vorhanden.

In einer anderen Klasse (neuerEintrag) erzeuge ich mit der Methode createTextField() in einer for-Schleife die Textfelder:

Java:
 for(int i = 0;i<anzTextFields;i++){
            textFields[i] = new JTextField();
            textFields[i] = aGUI.createTextField(textFieldSize, frame, locTextFieldX, locTextFieldY, anzTextFields, absTextFields);
            locTextFieldY = locTextFieldY + absTextFields;
        }

die Methode createTextField() sieht so aus:

Java:
    public JTextField createTextField(Dimension size, JFrame frame, int x, int y,int anzTextFields, int Abstand){
            JTextField Info = new JTextField();
            Info.setLocation(x, y);
            Info.setSize(size);
            frame.add(Info);
            return Info;
    }

In der Klasse createGUI(und nicht in der Klasse neuerEintrag) sind auch die Buttons, die ich erzeugen will. Diese Bekommen auch ActionListener. Dies realisiere ich wie folgt:

Java:
    public void createButton(final String[] name, Dimension size, final JFrame frame, int x, int y,int anzButtons){
        for(int i = 0;i<anzButtons;i++){
            JButton Verkauf = new JButton(name[i]);
            Verkauf.setSize(size);
            Verkauf.setLocation(x, y);
            final int t = i;
            Verkauf.addActionListener(new ActionListener(){
                 public void actionPerformed(ActionEvent e){
                                        ...
                     else if(name[t].equals("neuen Eintrag speichern")){
                         //nachdem dieser ActionListener betätigt wurde, sollen die Daten in den Textfeldern gespeichert werden.
                            
                     }
                 }
             });
            frame.add(Verkauf);
            y = y + 50;
        }
    }

Ich muss jetzt die Textfelder, die in neuerEintrag erzeugt wurden, an den ActionListener in createGUI übergeben, damit er sie an eine andere Klasse speichereEintrag() übergeben kann.

Hier komme ich nicht weiter. Wie kann ich das umgehen? Kennt jemand einen eleganteren Weg? Sorry, aber ich bin etwas Anfänger in OO...
 
Zuletzt bearbeitet:
verstehe ich das richtig, dass das JTextFields Array und die createButton Methode in derselben Klasse sind? Wenn ja müsstest du einfach in der actionPerformed Methode des Listeners drauf zugreifen können:

Java:
else if(e.getActionCommand().equals("neuen Eintrag speichern")) {
        //nachdem dieser ActionListener betätigt wurde, sollen die Daten in den Textfeldern gespeichert werden.
                            
        //verändern
        textFields[0].setText("");

        //auslesen
        String var = textFields[0].getText();

        //weitergeben
        anderesObjekt.machWasMitEinemTextField(textFields[0]);
        anderesObjekt.machWasMitAllenTextFields(textFields);
}

P.S. beachte auch die Änderung in Zeile 1)
 
verstehe ich das richtig, dass das JTextFields Array und die createButton Methode in derselben Klasse sind? Wenn ja müsstest du einfach in der actionPerformed Methode des Listeners drauf zugreifen können:

Java:
else if(e.getActionCommand().equals("neuen Eintrag speichern")) {
        //nachdem dieser ActionListener betätigt wurde, sollen die Daten in den Textfeldern gespeichert werden.
                            
        //verändern
        textFields[0].setText("");

        //auslesen
        String var = textFields[0].getText();

        //weitergeben
        anderesObjekt.machWasMitEinemTextField(textFields[0]);
        anderesObjekt.machWasMitAllenTextFields(textFields);
}

P.S. beachte auch die Änderung in Zeile 1)
[/QUOTE]

Nein, hast es nicht ganz richtig verstanden. Die Objekte werden an eine andere Klasse per return übergeben. D.h. die Methode "erstelleNeuenEintrag()" in der Klasse "neuerEintrag" ruft die Methode "createTextField()" von der Klasse "createGUI" auf. Die Textfelder werden an die Klasse "neuerEintrag" übergeben. Die Objekte sind also nicht mehr in der Klasse "createGUI" sondern in der Klasse "neuerEintrag". In der Methode "erstelleNeuenEintrag()" erzeuge ich noch einen Button mit "createButton()" von der Klasse "createGUI". Dieser bekommt einen ActionListener. IN DIESEN ActionListener müsste ich jetzt (unzwar NACHDEM der Button betätigt wurde) den Inhalt der Textfelder übergeben.
 
Zuletzt bearbeitet:
Wie gesagt, du machst das alles zu kompliziert. Wenn du einen Layoutmanager verwendest brauchst du nur zwei Zeilen Code um ein Textfeld zu erstellen, es in eine Variable zu speichern und in der richtigen Größe und Position anzuzeigen.
 
Ich denke nicht, dass es hier um die Darstellung geht. Scheint mir viel mehr ein Verarbeitungsproblem zu sein.

Also an der Stelle wo du die JTextField s erzeugst müsstest du diese z.B. in einer List<JTextField> speichern. Als ein attribut der Klasse CreateGui, meine ich. Dann könnten die ActionListener daruaf zugreifen.

Java:
public class CreateGui
{
    private List<JTextField> liste = new ArrayList<JTextField>();

    public JTextField createTextField(Dimension size, JFrame frame, int x, int y,int anzTextFields, int Abstand) {
        JTextField Info = new JTextField();
        Info.setLocation(x, y);
        Info.setSize(size);
        liste.add((JTextField)frame.add(Info));
        return Info;
    }


    public void createButton(final String[] name, Dimension size, final JFrame frame, int x, int y,int anzButtons){
        for(int i = 0;i<anzButtons;i++){
            JButton Verkauf = new JButton(name[i]);
            Verkauf.setSize(size);
            Verkauf.setLocation(x, y);
            
            Verkauf.addActionListener(new ActionListener(){
                 public void actionPerformed(ActionEvent e){
                                        ...
                     else if(e.getActionCommand().equals("neuen Eintrag speichern")){
                         //nachdem dieser ActionListener betätigt wurde, sollen die Daten in den Textfeldern gespeichert werden.
                            for(JTextField feld : liste) {
                                String inhalt = feld.getText();
                         }
                     }
                 }
             });
            frame.add(Verkauf);
            y = y + 50;
        }
    }
}
 

Zurück
Oben