# Textfeld einlesen, Wert einer Variable übergeben, .



## Guest (13. Jan 2007)

Ich mal wieder! ^^

So hier mein Gesuch:

In meiner Klasse Kugel wird ein Wert in das Textfeld geschrieben und mit dem Button "Berechnen" soll dieser Wert an einer Variable übergeben. Desweiteren soll sich eine neue Klasse Kugelbe auftun, wo mit diesen Wert gerechnet und das Ergebnis ausgegeben wird.

Klasse Kugel:

```
public class Kugel extends JFrame implements ActionListener
{
	double r;
	
	public Kugel ()
	{
		
		// Fenstereigenschaften
		super ("Kugel");
		setSize (800, 400);
		setLayout (new GridLayout (4, 1));
		
		// Panels
		JPanel titel = new JPanel();
		JPanel durchmesser = new JPanel();
		JPanel berechnen = new JPanel();
		JPanel button = new JPanel();
		
		// Panelhintergrund
		titel.setBackground (Color.yellow);
		durchmesser.setBackground (Color.cyan);
		berechnen.setBackground (Color.cyan);
		button.setBackground (Color.red);
		
		// Labels
		JLabel titela = new JLabel ("Stereometrie");
		JLabel durchmessera = new JLabel ("Durchmesser d:");
		
		// Labeleigenschaften
		titela.setFont(new Font("SansSerif", Font.PLAIN,40));
		durchmessera.setFont (new Font("SansSerif", Font.PLAIN,20));
		
		// Buttons
		JButton zurueck = new JButton ("Zurück");
		JButton beenden = new JButton ("Programm beenden");
		JButton berechnena = new JButton ("Berechnen");
		
		// Textfeld
		JFormattedTextField tf = new JFormattedTextField (new DecimalFormat("#.##"));
 		tf.setColumns(20);
		
		// Belegung der Panels
		titel.add (titela);
		durchmesser.add (durchmessera);
		durchmesser.add (tf);
		berechnen.add (berechnena);
		button.add (zurueck);
		button.add (beenden);
		
		// Einfügen der Panels
		add (titel);
		add (durchmesser);
		add (berechnen);
		add (button);
		
		// Sichtbarkeit des Fensters
		setVisible (true);
		
		// Einbinden der Buttons in den ActionListener
		zurueck.addActionListener (this);
		beenden.addActionListener (this);
		berechnena.addActionListener (this);
		tf.addActionListener (this);
		
		
	}
	
		public void actionPerformed(ActionEvent a)
	{	
	
		if (a.getActionCommand().equals("Zurück"))
		{
			Rund b = new Rund();
			setVisible (false);
		}
		
		if (a.getActionCommand().equals("Programm beenden"))
		{
			System.exit(0);
		}
		
		System.out.println ( ((JFormattedTextField)a.getSource()).getText() );
  
  		}
}
```

Hab schon viel probiert und gesucht und komme auf keine Lösung!
Wer kann helfen? Danke im vorraus!


----------



## André Uhres (14. Jan 2007)

```
...
public class Kugel extends JFrame implements ActionListener {
...
    private JFormattedTextField tf;
    private int durchmesser;
    public Kugel() {
...
        // Textfeld
        tf = new JFormattedTextField(new DecimalFormat("#.##"));
...
    }
    
    public void actionPerformed(final ActionEvent a) {
        if (a.getActionCommand().equals("Berechnen")) {
            durchmesser = Integer.parseInt(tf.getText());
            Kugelbe b = new Kugelbe(this, true, durchmesser);
            b.setVisible(true);
            return;
        }
...
    }
}
class Kugelbe extends JDialog{
    private int durchmesser;
    private JLabel label;
    public Kugelbe(final Frame parent, final boolean modal, final int durchmesser){
        super(parent, "Kugel berechnen", modal);
        this.durchmesser = durchmesser;
        label = new JLabel("");
        add(label, BorderLayout.NORTH);
        setSize(300,200);
        setLocationRelativeTo(parent);
        berechnen();
    }
    private void berechnen() {
        label.setText("durchmesser: "+durchmesser);
    }
}
```


----------



## epimetheus_xxx (14. Jan 2007)

Hatte ich mich doch gestern vergessen einzuloggen.

Danke für deine schnelle Hilfe! Hab das Programm jetzt soweit vervollständigt. Beim Compilieren kommt kein Fehler, aber beim Ausführen, passiert beim betätigen des Buttons "Berechnen" nichts. Folgender Text erscheint in dem DOS Fenster:









```
public class Kugel extends JFrame implements ActionListener
{
	private JFormattedTextField tf; 
    private double durchmesser; 
	
	public Kugel ()
	{
		
		// Fenstereigenschaften
		super ("Kugel");
		setSize (800, 400);
		setLayout (new GridLayout (4, 1));
		
		// Panels
		JPanel titel = new JPanel();
		JPanel durchmesser = new JPanel();
		JPanel berechnen = new JPanel();
		JPanel button = new JPanel();
		
		// Panelhintergrund
		titel.setBackground (Color.yellow);
		durchmesser.setBackground (Color.cyan);
		berechnen.setBackground (Color.cyan);
		button.setBackground (Color.red);
		
		// Labels
		JLabel titela = new JLabel ("Stereometrie");
		JLabel durchmessera = new JLabel ("Durchmesser d:");
		
		// Labeleigenschaften
		titela.setFont(new Font("SansSerif", Font.PLAIN,40));
		durchmessera.setFont (new Font("SansSerif", Font.PLAIN,20));
		
		// Buttons
		JButton zurueck = new JButton ("Zurück");
		JButton beenden = new JButton ("Programm beenden");
		JButton berechnena = new JButton ("Berechnen");
		
		// Textfeld
		tf = new JFormattedTextField (new DecimalFormat("#.##"));
 		tf.setColumns(20);
		
		// Belegung der Panels
		titel.add (titela);
		durchmesser.add (durchmessera);
		durchmesser.add (tf);
		berechnen.add (berechnena);
		button.add (zurueck);
		button.add (beenden);
		
		// Einfügen der Panels
		add (titel);
		add (durchmesser);
		add (berechnen);
		add (button);
		
		// Sichtbarkeit des Fensters
		setVisible (true);
		
		// Einbinden der Buttons in den ActionListener
		zurueck.addActionListener (this);
		beenden.addActionListener (this);
		berechnena.addActionListener (this);
		tf.addActionListener (this);
		
		
	}
	
		public void actionPerformed(final ActionEvent a)
	{
		if (a.getActionCommand().equals("Zurück"))
		{
			Rund b = new Rund();
			setVisible (false);
		}
		
		if (a.getActionCommand().equals("Programm beenden"))
		{
			System.exit(0);
		}
  		
  		if (a.getActionCommand().equals("Berechnen")) 
        { 
            durchmesser = Double.parseDouble(tf.getText()); 
            Kugelbe b = new Kugelbe(this, true, durchmesser); 
            b.setVisible(true); 
            return;    
  		}
  	}
}

class Kugelbe extends JDialog 
{   
    private double phi = 3.1416;
    private double A_O;
    private double V;
    private double durchmesser; 
    private JLabel label1;
    private JLabel label2; 
    
    public Kugelbe(final Frame parent, final boolean modal, final double durchmesser)
    { 
        super(parent, "Kugel berechnen", modal); 
        this.durchmesser = durchmesser; 
        label1 = new JLabel("");
        label2 = new JLabel("");
        add(label1, BorderLayout.NORTH); 
        add(label2, BorderLayout.SOUTH);
        setSize(300,200); 
        setLocationRelativeTo(parent); 
        berechnen(); 
        
    } 
    
    private void berechnen() 
    {
    
		A_O = phi * durchmesser * durchmesser;
		V = phi * durchmesser * durchmesser * durchmesser * 1 / 6;
	
		label1.setText("Oberfläche: "+A_O); 
		label2.setText("Volumen: "+V); 
	}
}
```


----------



## André Uhres (14. Jan 2007)

// Textfeld
        tf = new JFormattedTextField(new DecimalFormat("#.##"));


----------



## epimetheus_xxx (14. Jan 2007)

Danke, jetzt geht es. Nur er übernimmt die eingebenen Werte nur als Integer. Hab jetzt auch schon die Variable "durchmesser" als double deklariert. Er schneidet trotzdem immer den Wert hinter dem Komma weg.
Ich vermute mal das das an dem Objekt "DecimalFormat" liegt. Welches Format ist zu wählen, damit die Werte als double eingelesen werden? 

Hab den neuen Quelltext nochmal oben reineditiert.


----------



## André Uhres (14. Jan 2007)

epimetheus_xxx hat gesagt.:
			
		

> ..Welches Format ist zu wählen, damit die Werte als double eingelesen werden?..


http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html


----------



## epimetheus_xxx (15. Jan 2007)

mmh, so ganz schlau bin ich daraus nicht geworden, was zum Teil meiner mangelnden Englischkenntnisse zuzuschreiben ist!   
Habe alle Kombinationen von ("##,##") usw. ausprobiert und es geht nicht. Hab auch nochmal deas Forum durchsucht und konnte auch nichts Richtiges finden. 
Geht das überhaupt mit DecimalFormat? Oder muss ich einen extra Formatter schreiben?


----------

