TextBox aus einen ActionListener herraus lesen

Status
Nicht offen für weitere Antworten.

stevius

Neues Mitglied
Hi,
hab vor ein paar Tagen mit Java angefangen und schon eine Frage.

Ich habe eine GUI geschrieben, in der ich SWING nutze.
Nun habe ich auch eine TextBox geschrieben:

Code:
JTextField Zahl_01 = new JTextField(" Zahl_001 ");

Diese TextBox habe ich an meine GUI gefügt:

Code:
taschenrechner.add( Zahl_01, BorderLayout.LINE_START );

Einen Teil weiter unten habe ich dann auch einen Action Listener implementiert:

Code:
ActionListener Calculate = new ActionListener() {
        public void actionPerformed( ActionEvent e ) {
        	
        }
    };

Mit folgenden Code füge ich einen Button den ActionListener hinzu:

Code:
Ausrechnen.addActionListener(Calculate);

Nun möchte ich, dass wenn man auf diesen Butten klickt, die Zahl / der String aus der oben genannten TextBox ausgelesen wird, also:

Code:
Zahl_001.getText();

Leider geht aber nicht folgender Code:

Code:
ActionListener Calculate = new ActionListener() {
        public void actionPerformed( ActionEvent e ) {
        	Zahl_001.getText();
        }
    };

Da man aus den ActionListener nicht auf die Steuerelemente der "public static void main( String[] args )" zugreifen kann.

Also meine Frage ist, wie ich aus den ActionListener auf ein Steuerelement in der Main-Funktion meines Programmes zugreifen kann.

Vielen vielen Dank für all euere Antworten :wink:


edit: Kompletter Sourcecode:

Code:
import java.awt.*;
import java.awt.event.*; 
import javax.swing.*;

public class Taschenrechner  extends JFrame
  {
	
	//Globale Variablen
	String scripter = "Stevi's ";  String appname = "Math "; double appversion = 1.000; 
	
	//GUI-Klasse
  public Taschenrechner()
  { 
    setVisible(true); 
    setResizable(false); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setTitle(scripter + appname + appversion); 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation( (d.width  - getSize().width ) / 2,
                 (d.height - getSize().height) / 2 ); 
  }
  
  public static void main( String[] args )
  {
	  //Instanz von Taschenrechner erzeugen
    Taschenrechner taschenrechner = new Taschenrechner(); 
    
      //Steuerelemente erzeugen
    JButton Ausrechnen = new JButton("Ausrechnen"); 
    JTextField Zahl_01 = new JTextField(" Zahl_001 ");
    JTextField Zahl_02 = new JTextField(" Zahl_002 "); 
    JButton Beenden    = new JButton("Beenden"); 
    
      //Steuerelemente anordnen
    taschenrechner.setLayout( new BorderLayout(5, 5) );
    taschenrechner.add( Ausrechnen, BorderLayout.PAGE_START );
    taschenrechner.add( Zahl_02, BorderLayout.LINE_END );
    taschenrechner.add( Beenden, BorderLayout.PAGE_END );
    taschenrechner.add( Zahl_01, BorderLayout.LINE_START );

      //Steuerelment erzeugen
    JComboBox choice = new JComboBox(); 
    choice.addItem("+"); 
    choice.addItem("-"); 
    choice.addItem("*"); 
    choice.addItem("/"); 
    
      //Steuerelement anordnen
    taschenrechner.add(choice); 
    
      //ActionListener erzeugen
    ActionListener End = new ActionListener() {
        public void actionPerformed( ActionEvent e ) {
          System.exit( 0 );
        }
    }; 
      
      //ActionListener erzeugen
    ActionListener Calculate = new ActionListener() {
        public void actionPerformed( ActionEvent e ) {
        	System.out.println("sdf");  //<--- FEHLER
        }
    };
    
      //ActionListener hinzufügen
    Beenden.addActionListener(End); 
    Ausrechnen.addActionListener(Calculate); 
    
      //GUI verkleinern
    taschenrechner.pack(); 
      
  }
}
 
Hiho, dein Textfield existiert nur in der main().
Wenn du ein Object davon in deiner Klasse aufnimmst kannst du von überall innerhalb der Klasse drauf zugreifen.
Daher is es auch sinvoller alle Elemente direkt in deinem Konstruktor zu erzeugen und dann in der Main einfach
nur eine Instance von deinem Taschenrechner zu erzeugen:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Taschenrechner  extends JFrame {
	   
	   //Globale Variablen
	   String scripter = "Stevi's ";  String appname = "Math "; double appversion = 1.000;
	   
	   JButton Ausrechnen;
	   JTextField Zahl_01;
	   JTextField Zahl_02;
	   JButton Beenden;
	   JComboBox choice;
	   
	   //GUI-Klasse
	  public Taschenrechner() {
	    this.setResizable(false);
	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    this.setTitle(scripter + appname + appversion);
	    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	    this.setLocation( (d.width  - getSize().width ) / 2, (d.height - getSize().height) / 2 );

	    //Steuerelemente erzeugen
	    Ausrechnen = new JButton("Ausrechnen");
	    Zahl_01 = new JTextField(" Zahl_001 ");
	    Zahl_02 = new JTextField(" Zahl_002 ");
	    Beenden    = new JButton("Beenden");
	   
	    //Steuerelemente anordnen
	    this.setLayout( new BorderLayout(5, 5) );
	    this.add( Ausrechnen, BorderLayout.PAGE_START );
	    this.add( Zahl_02, BorderLayout.LINE_END );
	    this.add( Beenden, BorderLayout.PAGE_END );
	    this.add( Zahl_01, BorderLayout.LINE_START );

	    //Steuerelment erzeugen
	    choice = new JComboBox();
	    choice.addItem("+");
	    choice.addItem("-");
	    choice.addItem("*");
	    choice.addItem("/");
	   
	    //Steuerelement anordnen
	    this.add(choice);

	    //ActionListener erzeugen
	    ActionListener End = new ActionListener() {
	        public void actionPerformed( ActionEvent e ) {
	          System.exit( 0 );
	        }
	    };

	    //ActionListener erzeugen
	    ActionListener Calculate = new ActionListener() {
	        public void actionPerformed( ActionEvent e ) {
	           System.out.println("sdf");  //<--- FEHLER
	        }
	    };

	    //ActionListener hinzufügen
	    Beenden.addActionListener(End);
	    Ausrechnen.addActionListener(Calculate);
	    
	    this.pack();
	  }
	 
	  public static void main( String[] args ) {
	    //Instanz von Taschenrechner erzeugen
	    Taschenrechner taschenrechner = new Taschenrechner();
	    taschenrechner.setVisible(true);
	  }
}
 
Oh, vielen vielen Dank!
Hab jetzt mal neu gemacht.

Nun hab ich ein ganz anderes Problem, was weitaus schlimmer ist.

Ich habe folgenden Sourcecode:

Code:
import java.awt.*;
import java.awt.event.*; 
import javax.swing.*;

public class Taschenrechner  extends JFrame
  {
	
	//Globale Variablen
	String scripter = "Stevi's ";  String appname = "Math "; double appversion = 1.000; int a = 0; 
	
	//GUI-Klasse
	public Taschenrechner()
	{ 
	    setVisible(true); 
	    setResizable(false); 
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
	    setTitle(scripter + appname + appversion); 
	    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	    setLocation( (d.width  - getSize().width ) / 2,
	                 (d.height - getSize().height) / 2 ); 
    
    	//Steuerelemente erzeugen
	    final JButton ausrechnen = new JButton("Ausrechnen"); 
	    final JTextField zahl_01 = new JTextField(" Zahl_001 ");
	    final JTextField zahl_02 = new JTextField(" Zahl_002 "); 
	    final JButton beenden    = new JButton("Beenden"); 
    
      	//Steuerelemente anordnen
	    this.setLayout( new BorderLayout(5, 5) );
	    this.add( ausrechnen, BorderLayout.PAGE_START );
	    this.add( zahl_02, BorderLayout.LINE_END );
	    this.add( beenden, BorderLayout.PAGE_END );
	    this.add( zahl_01, BorderLayout.LINE_START );
    
    	//Steuerelment erzeugen
	    final JComboBox choice = new JComboBox(); 
	    choice.addItem("+"); 
	    choice.addItem("-"); 
	    choice.addItem("*"); 
	    choice.addItem("/"); 
    
    	//Steuerelement anordnen
	    this.add(choice); 
    
	//ActionListener erzeugen (Beenden)
	    ActionListener End = new ActionListener() {
	        public void actionPerformed( ActionEvent e ) {
	          System.exit( 0 );
	        }
	    }; 
	//ActionListener erzeugen   (Berechnen)
	    ActionListener Calculate = new ActionListener() {
	        public void actionPerformed( ActionEvent e ) {
	        	 if(choice.getSelectedItem() == "+"){
	        		 
	        		String zahl01 = zahl_01.getText();
	        		String zahl02 = zahl_02.getText(); 
	        		float zahl1 = Float.valueOf(zahl01).floatValue(); 
	        		float zahl2 = Float.valueOf(zahl02).floatValue(); 
	        		float zahl3 = zahl1 + zahl2; 
	        		String ergebnis = "" + zahl3;
	        		setTitel(ergebnis);
	        		
	        	 }
	        	 
	        	 if(choice.getSelectedItem() == "-"){
	        		String zahl01 = zahl_01.getText();
		        	String zahl02 = zahl_02.getText(); 
		        	float zahl1 = Float.valueOf(zahl01).floatValue(); 
	        		float zahl2 = Float.valueOf(zahl02).floatValue(); 
	        		float zahl3 = zahl1 - zahl2; 
		        	String ergebnis = "" + zahl3; 
		        	setTitel(ergebnis);
	        	 }
	        	 
	        	 if(choice.getSelectedItem() == "*"){
		        		String zahl01 = zahl_01.getText();
			        	String zahl02 = zahl_02.getText(); 
			        	float zahl1 = Float.valueOf(zahl01).floatValue(); 
		        		float zahl2 = Float.valueOf(zahl02).floatValue(); 
		        		float zahl3 = zahl1 * zahl2; 
			        	String ergebnis = "" + zahl3; 
			        	setTitel(ergebnis);
		        }
	        	 
	        	 if(choice.getSelectedItem() == "/"){
		        		String zahl01 = zahl_01.getText();
			        	String zahl02 = zahl_02.getText(); 
			        	float zahl1 = Float.valueOf(zahl01).floatValue(); 
		        		float zahl2 = Float.valueOf(zahl02).floatValue(); 
		        		float zahl3 = zahl1 / zahl2; 
			        	String ergebnis = "" + zahl3; 
			        	setTitel(ergebnis);
		        	 }
	        }
	    };
	    
	//ActionListener erzeugen (Mouseevents)
	    MouseListener Click = new MouseListener() {
	    	public void mouseClicked(MouseEvent e) {
	    			if(a == 0)
	    			{
	    				zahl_01.setText("");
	    				zahl_02.setText("");  
	    				a++; 
	    			}
	    		}
	    	public void mouseExited(MouseEvent e) {}
	    	public void mouseReleased(MouseEvent e) {}
	    	public void mousePressed(MouseEvent e) {}
	    	public void mouseEntered(MouseEvent e) {}
		    	
	    }; 
    
    	//ActionListener hinzufügen
	    beenden.addActionListener(End); 
	    ausrechnen.addActionListener(Calculate);
	    zahl_01.addMouseListener(Click); 
	    zahl_02.addMouseListener(Click); 
    
    	//GUI verkleinern
	    this.pack(); 

  }
	
	//Fenstertitel nach Ergebnis ändern
	public void setTitel( String title )
	{
		this.setTitle("Ausgabe: " + title); 
	}
  
  	public static void main( String[] args )
  	{
	  
	//Instanz von Taschenrechner erzeugen
	    Taschenrechner taschenrechner = new Taschenrechner(); 
  	}

}

Bei mir auf meinen System läuft das Programm nun perfekt! Ohne Mankos.
Aber ich hab es einen Freund gegeben und bei dem ist der gesamte PC abgestürzt.
Wisst ihr warum?

Einziger Unterschied: Ich hab Windows er Linux.
Ich benütze die BETA II von Java 6.
 
Kann ja nur am shice linux liegen 😀
Der shice Nautilus stürzt bei mir auch öfters ab wenn ich Apps mit Dialogs starte .. keine Ahnung ob das auch so bei deinem Kumpel is *hrrhrr*
Wenn es ein Versionskonflikt währe kommt in der Konsole was von: Unsupported major.minor version

Soll dein Kumpel mal die Java-Console öffnen und gucken ob da Fehler kommen, bei mir unter Suse 9.3 und Java 1.5.0_07 klappts fehlerfrei.
 
MasterEvil hat gesagt.:
Soll dein Kumpel mal die Java-Console öffnen und gucken ob da Fehler kommen, bei mir unter Suse 9.3 und Java 1.5.0_07 klappts fehlerfrei.
Hehe, ich glaub das wird etwas schwierig :lol:
Sobald ich das Programm starte bleibt die gesamte grafische Oberfläche einfach stehen, man kann den Mauszeiger noch bewegen, Prozesse im Hintergrund laufen weiter. Es ist allerdings nicht mehr möglich auf die Konsole zu wechseln (mit ctrl + alt + F1), noch ist es möglich X zu killen (mit ctrl + alt + backspace).
Ich vermute es liegt an meinem Windowmanager, der einen Rappel bekommt, weil das Fenster schon angezeigt wird, bevor es eine Grösse hat, der stürtzt auch ab, wenn ich ein Fenster ganz klein "zusammenschiebe" (WM ist OpenBox 3).
Woran das allerdings liegt kann ich leider nicht sagen.

Ps: Ein Versionskonflikt wird es wohl bei JDK 6 beta 2 nicht geben 😉

mfg me1357
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben