Zum Inhalt springen

JTextField über einen Button auslesen


Empfohlene Beiträge

Geschrieben

Ich habe ein Problem und zwar:

-wie kann man 3 JTextFields auslesen wenn der Action-Event von einem Button kommt (von den JTextFields soll kein Action-Event ausgehen, so wie z.B. [Enter])

und wie übergebe ich dann die 3 Strings an eine weitere Klasse??

cu Peeter

PS: Helft mir, da ich kurz vorm verzweifeln bin!!!

Geschrieben

Hi,

ich denke so kannst du die JTextFields mit .getText() auslesen.


public void jButton1_ActionEvents()

{

	String a = ivjJTextField1.getText();

	String b = ivjJTextField2.getText();

	String c = ivjJTextField3.getText();



	//so kannst du es an eine weitere Klasse geben.	

	neueKlasse nk = new neueKlasse(a, b, c)

	return;

}

Dazu musst du dir einenen eigenen Konstruktor schreiben. Hab mal eine Beispielklasse geschrieben das ich oben aufrufe.

class neueKlasse

{

	public neueKlasse()

	{

		super();

	}

	public neueKlasse(String aa, String bb, String cc)

	{

		super();

	}

}


Hoffe ich konnte dir helfen

MFG

Geschrieben

DANKE!!!!

Jetzt hab ich nur noch ein Problem und zwar liegt es in den TextFields!!

< String a = ivjJTextField1.getText();

< String b = ivjJTextField2.getText();

< String c = ivjJTextField3.getText();

Ich hab die Textfelder ja schon vorher initialisiert(in dem Konstruktor für meine Oberfläche!!!

Hier mal den Beispielcode!!

{

.

.

.

JButton button2=new JButton("Button1");

JButton buttonS=new JButton("Button2");

JLabel label;

JTextField field1=new JTextField(20);

JTextField field2=new JTextField(20);

JTextField field3=new JTextField(20);

Container cp=getContentPane();

cp.setLayout(new FlowLayout(1));

label=new JLabel("label 1");

cp.add(label);

cp.add(field1);

label=new JLabel("label 2");

cp.add(label);

cp.add(field2);

label=new JLabel("label 3");

cp.add(label);

cp.add(field3);

cp.add(buttonS);

button2.addActionListener(new BuLi());

cp.add(button2);

.

.

.

}

// Sobald der Button angeklickt wird soll er den Inhalt aus den 3 TextFeldern auslesen und übergeben!!

public void buttonS_actionEvents()

{

String string1=field1.getText();

String string2=field2.getText();

String string3=field3.getText();

BuRe buttonrechts=new BuRe(string1,string2,string3);

}

Und dann bringt er mir immer diese Fehlermeldung:

symbol : variable field3

location: class Oberfl

String portE=field3.getText();

^

Wo liegt der Fehler??(Ich weiß, das man die "fields" so nicht übergeben kann!!!)

MfG

Peeter :confused: :confused:

Geschrieben

Hi,

das andere von der Fehlermeldung wäre noch interessanter gewesen (was für eine Exception Du genau bekommst), aber ich denke, Du hast die Variable field3 nicht als Klassen-Eigenschaft definiert und daher darfst Du sie nicht global verwenden.

Also direkt nach deiner Klassendefinition

JTextField field1,field2,field3;

Und schon darfst Du zugreifen.

MfG Markus

Geschrieben

DANKE esrt mal!!!!!

So, jetzt hab ich ne konkret krasse Exception!!!

Exception occurred during event dispatching:

java.lang.NullPointerException

at Oberfl.actionPerformed(Programm.java:138)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450)

at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1504)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:378)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:250)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:216)

at java.awt.Component.processMouseEvent(Component.java:3717)

at java.awt.Component.processEvent(Component.java:3546)

at java.awt.Container.processEvent(Container.java:1164)

at java.awt.Component.dispatchEventImpl(Component.java:2595)

at java.awt.Container.dispatchEventImpl(Container.java:1213)

at java.awt.Component.dispatchEvent(Component.java:2499)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2216)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2125)

at java.awt.Container.dispatchEventImpl(Container.java:1200)

at java.awt.Window.dispatchEventImpl(Window.java:912)

at java.awt.Component.dispatchEvent(Component.java:2499)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:319)

at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:84)

So, was nun????

Ich glaube es hat etwas damit zu tun!!!

public void buttonS_ActionEvents()

{

String host = field1.getText();

String portA = field2.getText();

String portE = field3.getText();

BuRe buttonrechts=new BuRe(host,portA,portE);

return;

}

WAS NUN???!!!*seufz*

Geschrieben

HAT SICH SCHON ERLEDIGT!!!!!!

Ich hab´s rausbekommen!!!!!

:-)

MfG

Peeter

PS: Falls es jemanden interessiert:

public void actionPerformed(ActionEvent event)

{

String cmd = event.getActionCommand();

if(cmd.equals("SCAN"))

{

String host = field1.getText();

String portA = field2.getText();

String portE = field3.getText();

System.out.println(host);

System.out.println(portA);

System.out.println(portE);

BuRe buttonrechts=new BuRe(host,portA,portE);

}

}

Geschrieben

Also das JTextField ließt er jetzt ohne Probleme aus!!!

Jetzt hab ich nur noch 1 Problem!!!*heul*

Er will meine Klasse nicht mehr aufrufen!!!!

public void actionPerformed(ActionEvent event)

{

String cmd = event.getActionCommand();

if(cmd.equals("SCAN"))

{

String host = field1.getText();

String portA = field2.getText();

String portE = field3.getText();

BuRe buttonrechts=new BuRe(host,portA,portE);

}

}

*langsamdurchdreh*

;)

Geschrieben

Hmm kennst du dich mit anonymen Klassen aus ?

Ist nur mal ein Ansatz:

z.B Button buttonrechts = new Button("BlaBla");

buttonrechts.addActionListener( new ActionListener() {

public void actionPerformed(ActionEvent e) {

/*

und hier nun was Du damit tun willst

*/

}

});

Damit kannst du individuell auf jeden Button reagieren, löst so manche Probleme......

Beachte aber das Variablen, Objekte die in dieser Klasse genutzt werden, mit final deklariert werden müssen.

z.B final String portA = textField.getText();

Geschrieben

Das hab ich schon probiert, hat aber trotzdem nicht gefunzt!!! Genau dieses Schema hab ich ja auch schon angewandt!!

Ich schätze mal, das der Fehler in dieser Zeile steckt!

>>>buttonrechts=new BuRe(fieldhost,fieldportA,fieldportE);<<<

Bei einem Debug überspringt er diese Zeile einfach!!!

Aber Danke nochmal!!!!

Peeter

Geschrieben

Hi,

nungut also wenn Ihr jetzt drüber diskutiert was an sich besser sein sollte, dann würde ich auf keinen Fall anonyme Klassen für ActionHandling hernehmen sondern Inner-Classes und zwar abgeleitet von AbstractAction und diese dann an den Button hängen (gibt einen Konstruktor von JButton, wo Du eine Action mitgeben kannst).

Dann hast Du wirklich volle Kontrolle und kannst eine Action auch an mehrere Buttons hängen usw.

MfG Markus

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Hi,

nungut also wenn Ihr jetzt drüber diskutiert was an sich besser sein sollte, dann würde ich auf keinen Fall anonyme Klassen für ActionHandling hernehmen sondern Inner-Classes und zwar abgeleitet von AbstractAction und diese dann an den Button hängen (gibt einen Konstruktor von JButton, wo Du eine Action mitgeben kannst).

Dann hast Du wirklich volle Kontrolle und kannst eine Action auch an mehrere Buttons hängen usw.

MfG Markus

Geschrieben

Hi,

eine Inner-Class wird genauso definiert wie eine normale, nur das sie eben innerhalb einer anderen Klasse steht:


public class outerclass{

...


       private class innerclass{

         Methoden der inneren Klasse

       }

}

Du kannst einen String mit buttonName.setText("OK") noch setzen. Der Vorteil ist, daß eine solche Action an alle Componenten gehängt werden kann, die ein ActionEvent werfen können. Also ein kleines Beispiel:

Du hast eine Applikation mit Menüleiste, Iconleiste und noch Buttons.

Es gibt einen Button, einen Menüpunkt und ein Icon zum speichern.

Auf Deine Art müßtest Du dreimal alles codieren, auf meine Art hänge ich die gleiche Action dreimal an unterschiedliche Komponenten. Außerdem: Wenn z.B. noch nicht zum speichern da ist, dann will ich alle drei Komponenten deaktivieren. Du setzt jetzt aufwendig jede der drei Komponenten auf disabled. Ich setze meine ACTION auf disabled und die GUI passt sich automatisch an (MVC-Prinzip).

Hoffe das hat Dich überzeugt :D

MfG Markus

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...