Peeter Geschrieben 10. Oktober 2001 Geschrieben 10. Oktober 2001 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!!! Zitieren
TBlei Geschrieben 10. Oktober 2001 Geschrieben 10. Oktober 2001 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 Zitieren
Peeter Geschrieben 10. Oktober 2001 Autor Geschrieben 10. Oktober 2001 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: Zitieren
Gast Os-T Geschrieben 10. Oktober 2001 Geschrieben 10. Oktober 2001 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 Zitieren
Peeter Geschrieben 10. Oktober 2001 Autor Geschrieben 10. Oktober 2001 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* Zitieren
Peeter Geschrieben 10. Oktober 2001 Autor Geschrieben 10. Oktober 2001 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); } } Zitieren
Peeter Geschrieben 10. Oktober 2001 Autor Geschrieben 10. Oktober 2001 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* Zitieren
TuTuT Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 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(); Zitieren
Peeter Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 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 Zitieren
Gast Os-T Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 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 Zitieren
Peeter Geschrieben 11. Oktober 2001 Autor Geschrieben 11. Oktober 2001 <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 Zitieren
Gast Os-T Geschrieben 11. Oktober 2001 Geschrieben 11. Oktober 2001 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 MfG Markus Zitieren
Empfohlene Beiträge
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.