Ich bin fast fertig mit meinem Programm es sind nur nur zwei Kleinigkeiten. Und wir haben schon viel probiert, sind aber zu keiner Lösung gekommen.
1. Problem:
Das JFrame mit dem Bild, soll bei Betätigung des Buttons Zurück ebenfalls geschlossen werden. Wie implementiere ich das in den ActionListener?
2. Problem:
Wie können die Textfelder Kommazahlen einlesen? Geht das überhaupt mit dem DecimalFormat?
Danke für Eure Hilfe.
1. Problem:
Das JFrame mit dem Bild, soll bei Betätigung des Buttons Zurück ebenfalls geschlossen werden. Wie implementiere ich das in den ActionListener?
2. Problem:
Wie können die Textfelder Kommazahlen einlesen? Geht das überhaupt mit dem DecimalFormat?
Danke für Eure Hilfe.
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
public class Hohlzylinder extends JFrame implements ActionListener
{
// Variablendeklaration
private JFormattedTextField tfd1;
private JFormattedTextField tfd2;
private JFormattedTextField tfh;
private double durchmesser1;
private double durchmesser2;
private double hoehe;
// Konstruktor
public Hohlzylinder ()
{
// Fenstereigenschaften
super ("gerader Hohlzylinder");
setSize (800, 400);
setLayout (new GridLayout (6, 1));
// Panels
JPanel titel = new JPanel ();
JPanel durchmesser1 = new JPanel ();
JPanel durchmesser2 = new JPanel ();
JPanel hoehe = new JPanel ();
JPanel berechnen = new JPanel ();
JPanel button = new JPanel ();
// Panelhintergrund
titel.setBackground (Color.yellow);
durchmesser1.setBackground (Color.cyan);
durchmesser2.setBackground (Color.cyan);
hoehe.setBackground (Color.cyan);
berechnen.setBackground (Color.cyan);
button.setBackground (Color.red);
// Labels
JLabel titela = new JLabel ("Stereometrie");
JLabel durchmesser1a = new JLabel ("Durchmesser d_1:");
JLabel durchmesser2a = new JLabel ("Durchmesser d_2:");
JLabel hoehea = new JLabel ("Höhe h:");
// Labeleigenschaften
titela.setFont(new Font ("SansSerif", Font.PLAIN,40));
durchmesser1a.setFont (new Font( "SansSerif", Font.PLAIN,20));
durchmesser2a.setFont (new Font ("SansSerif", Font.PLAIN,20));
hoehea.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
tfd1 = new JFormattedTextField (new DecimalFormat ());
tfd2 = new JFormattedTextField (new DecimalFormat ());
tfh = new JFormattedTextField (new DecimalFormat ());
tfd1.setColumns (20);
tfd2.setColumns (20);
tfh.setColumns (20);
// Belegung der Panels
titel.add (titela);
durchmesser1.add (durchmesser1a);
durchmesser1.add (tfd1);
durchmesser2.add (durchmesser2a);
durchmesser2.add (tfd2);
hoehe.add (hoehea);
hoehe.add (tfh);
berechnen.add (berechnena);
button.add (zurueck);
button.add (beenden);
// Einfügen der Panels
add (titel);
add (durchmesser1);
add (durchmesser2);
add (hoehe);
add (berechnen);
add (button);
// Sichtbarkeit des Fensters
setVisible (true);
// Einbinden der Buttons in den ActionListener
zurueck.addActionListener (this);
beenden.addActionListener (this);
berechnena.addActionListener (this);
tfd1.addActionListener (this);
tfd2.addActionListener (this);
tfh.addActionListener (this);
Hohlzylinderbild ();
}
// Methode
public void Hohlzylinderbild ()
{
// Fenstereigenschaften und einfügen eines Bildes
JFrame frame = new JFrame ("Hohlzylindervariablen");
frame.setDefaultCloseOperation (JFrame.HIDE_ON_CLOSE);
ImageIcon bild = new ImageIcon (Hohlzylinder.class.getResource ("Hohlzylinder.jpg"));
JLabel Pic = new JLabel (bild);
frame.getContentPane ().add (Pic,BorderLayout.CENTER);
frame.setLocation (800, 0);
frame.pack();
frame.setVisible (true);
}
// Action Methode
public void actionPerformed (final ActionEvent a)
{
// Sprung zurück in die Klasse Rund
if (a.getActionCommand ().equals ("Zurück"))
{
Rund b = new Rund ();
setVisible (false);
}
// Programm beenden
if (a.getActionCommand ().equals ("Programm beenden"))
{
System.exit(0);
}
// Aufrufen der internen Klasse Hohlzylinderbe und auslesen der Textfelder
if (a.getActionCommand ().equals ("Berechnen"))
{
durchmesser1 = Double.parseDouble (tfd1.getText ());
durchmesser2 = Double.parseDouble (tfd2.getText ());
hoehe = Double.parseDouble (tfh.getText ());
Hohlzylinderbe c = new Hohlzylinderbe (this, true, durchmesser1, durchmesser2, hoehe);
c.setVisible (true);
return;
}
}
}
// Klasse Hohlzylinderberechnung
class Hohlzylinderbe extends JDialog
{
// Variblendeklaration
private double phi = 3.1416;
private double A_O;
private double A_M;
private double V;
private double durchmesser1;
private double durchmesser2;
private double hoehe;
private JLabel label1;
private JLabel label2;
private JLabel label3;
// Konstruktor
public Hohlzylinderbe (final Frame parent, final boolean modal,
final double durchmesser1,
final double durchmesser2,
final double hoehe)
{
super (parent, "geraden Hohlzylinder berechnen", modal);
// Übernehmen der Variablen
this. durchmesser1 = durchmesser1;
this. durchmesser2 = durchmesser2;
this.hoehe = hoehe;
// Labels
label1 = new JLabel ("");
label2 = new JLabel ("");
label3 = new JLabel ("");
// Einfügen der Labels und Layout
add (label1, BorderLayout.NORTH);
add (label2, BorderLayout.CENTER);
add (label3, BorderLayout.SOUTH);
// Eigenschaften Dialogfenster
setSize (300,200);
this.getContentPane ().setBackground (Color.cyan);
setLocationRelativeTo (parent);
berechnen();
}
// Methode Berechnung
private void berechnen()
{
// Berechnung
A_M = phi * hoehe * (durchmesser1 + durchmesser2);
A_O = (phi / 2) * (durchmesser2 + durchmesser1) * (2 * hoehe + (durchmesser1 - durchmesser2));
V = (phi / 4) * hoehe * ((durchmesser2 * durchmesser2) + (durchmesser1 * durchmesser1));
// Labels beschreiben
label1.setText (" Oberfläche: "+A_O);
label2.setText (" Mantelfläche: "+A_M);
label3.setText (" Volumen: "+V);
}
}