Hallo ihr Lieben,
ich bin ein absoluter Anfänger und versuche derzeit eine Art Spritrechner zu programmieren. Ich möchte eine ComboBox benutzen, um eine Bestimmgröße für die eigentliche Verbrauchs-/Streckenberechnung zu setzten. Nach stundenlanger Recherche habe ich leider noch keine zufriedenstellende Lösung gefunden. Mir schwebt eine Berechnung vor, die mehrere ifs enthält, also für Wagenklasse, Motortyp, etc. Die ComboBox wäre dann die erste Bedingung. Inzwischen bin ich soweit, dass ich der ComboBox einen ActionListener hinzugefügt habe, dieser soll irgendwie das gewählte Item erfassen. Dort beginnen dann die Schwierigkeiten.
Ein weiteres Hindernis ist, dass ich es nicht schaffe, mein Ergebnis anzeigen zu lassen. Im Ausgabefeld erscheint immer nur "0.0", was meine Bemühungen natürlich erschwert. Diesbezüglich bin ich leider komplett planlos, da ich mich bei dem Abbilden des Ergebnisses an einem laufenden Programm orientiert habe. Wenn das funktionieren würde, könnte ich das andere Problem evtl. auch einfacher lösen.
Für Anregungen und Lösungsvorschläge wäre ich wirklich sehr dankbar
ich bin ein absoluter Anfänger und versuche derzeit eine Art Spritrechner zu programmieren. Ich möchte eine ComboBox benutzen, um eine Bestimmgröße für die eigentliche Verbrauchs-/Streckenberechnung zu setzten. Nach stundenlanger Recherche habe ich leider noch keine zufriedenstellende Lösung gefunden. Mir schwebt eine Berechnung vor, die mehrere ifs enthält, also für Wagenklasse, Motortyp, etc. Die ComboBox wäre dann die erste Bedingung. Inzwischen bin ich soweit, dass ich der ComboBox einen ActionListener hinzugefügt habe, dieser soll irgendwie das gewählte Item erfassen. Dort beginnen dann die Schwierigkeiten.
Ein weiteres Hindernis ist, dass ich es nicht schaffe, mein Ergebnis anzeigen zu lassen. Im Ausgabefeld erscheint immer nur "0.0", was meine Bemühungen natürlich erschwert. Diesbezüglich bin ich leider komplett planlos, da ich mich bei dem Abbilden des Ergebnisses an einem laufenden Programm orientiert habe. Wenn das funktionieren würde, könnte ich das andere Problem evtl. auch einfacher lösen.
Für Anregungen und Lösungsvorschläge wäre ich wirklich sehr dankbar
Java:
package paket1;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JRadioButton;
import java.awt.FlowLayout;
import javax.swing.ButtonGroup;
import javax.swing.ComboBoxModel;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import com.jgoodies.forms.factories.DefaultComponentFactory;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
public class GUI extends JFrame {
private JPanel contentPane;//Container (keine Klasse)
private JComboBox cbKlasse; //Definition der Variablen; hier oben, weil keine lokalen Variablen
private JTextField txtErgebnis;
private JTextField txtEingabe;
private JRadioButton rdbtnVerbrauchBerechnen;
private JRadioButton rdbtnStreckeBerechnen;
private JRadioButton rdbtnDiesel;
private JRadioButton rdbtnBenzin;
private double endergebnis;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI frame = new GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GUI() {
setTitle("Spritrechner");//Titel der Gui setzen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//GUI wird beim Anklicken des X geschlossen
setBounds(100, 100, 550, 300);//Größe der Gui
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);//Layout wird individuell gestaltet
JLabel lblWasWollenSie = new JLabel("Was wollen Sie tun?");//erste Frage
lblWasWollenSie.setBounds(10, 14, 140, 14);
contentPane.add(lblWasWollenSie);
JLabel test = new JLabel();
test.setBounds(10, 113, 400, 14);//Position/Pos/Größe/Größe
contentPane.add(test);
rdbtnVerbrauchBerechnen = new JRadioButton("Verbrauch berechnen");//erster RadioButton
rdbtnVerbrauchBerechnen.addActionListener(new ActionListener() {//durch Auswahl wird Aufforderung (Label angezeigt)
public void actionPerformed(ActionEvent arg0) {
test.setText("Bitte geben Sie die gewüschte Strecke an:");
}
});
rdbtnVerbrauchBerechnen.setBounds(190, 10, 180, 23);//Position/Größe auf der GUI
contentPane.add(rdbtnVerbrauchBerechnen);//Hinzufügen
rdbtnStreckeBerechnen = new JRadioButton("Strecke berechnen");//zweiter RadioButton
rdbtnStreckeBerechnen.addActionListener(new ActionListener() {//durch Auswahl wird Aufforderung (Label) angezeigt
public void actionPerformed(ActionEvent arg0) {
test.setText("Bitte geben Sie die zur Verf\u00FCgung stehende Spritmenge an:");
}
});
rdbtnStreckeBerechnen.setBounds(376, 10, 180, 23);//Position/Größe auf der GUI
contentPane.add(rdbtnStreckeBerechnen);//Hinzufügen
ButtonGroup gruppeAktion= new ButtonGroup();//RadioButton 1 und 2 bilden eine Gruppe -> nur einer kann ausgewählt werden
gruppeAktion.add(rdbtnVerbrauchBerechnen);
gruppeAktion.add(rdbtnStreckeBerechnen);
JLabel lblNewLabel = new JLabel("Bitte wählen Sie den Motortyp:");//zweite Frage
lblNewLabel.setBounds(10, 40, 200, 14);
contentPane.add(lblNewLabel);
rdbtnDiesel = new JRadioButton("Diesel");//dritter RadioButton
rdbtnDiesel.setBounds(190, 36, 80, 23);
contentPane.add(rdbtnDiesel);
rdbtnBenzin = new JRadioButton("Benzin");//vierter RadioButton
rdbtnBenzin.setBounds(308, 36, 80, 23);
contentPane.add(rdbtnBenzin);
ButtonGroup gruppeMotor= new ButtonGroup();//Button 3 und 4 werden wieder in Gruppe zusammengefügt, damit nur einer ausgewählt werden kann
gruppeMotor.add(rdbtnDiesel);
gruppeMotor.add(rdbtnBenzin);
JLabel lblBitteWhlenSie = new JLabel("Bitte w\u00E4hlen Sie die Autoklasse:");//dritte Frage
lblBitteWhlenSie.setBounds(10, 68, 200, 14);
contentPane.add(lblBitteWhlenSie);
cbKlasse = new JComboBox();//Auswahlmöglichkeiten für Frage 3
cbKlasse.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent arg) {
if (arg.getSource().equals(_comboBox)) {//hier weiß ich nicht weiter...
}
});
DefaultComboBoxModel klasseAuswahl = new DefaultComboBoxModel(new String[] {"Kleinwagen", "Mittelklassewagen", "Oberklassewagen", "Van", "SUV", "Sportwagen"});
cbKlasse.setModel(klasseAuswahl);
cbKlasse.setBounds(200, 67, 148, 17);
contentPane.add(cbKlasse);
txtErgebnis = new JTextField();
txtErgebnis.setText("Ergebnis");
txtErgebnis.setBounds(405, 154, 86, 20);
contentPane.add(txtErgebnis);
txtErgebnis.setColumns(10);
txtEingabe = new JTextField();
txtEingabe.setText("Eingabe");
txtEingabe.setBounds(405, 113, 86, 20);
contentPane.add(txtEingabe);
txtEingabe.setColumns(10);
JLabel hinweis = new JLabel();//Hinweis-Label erstellen
hinweis.setLabelFor(this);
hinweis.setVerticalAlignment(SwingConstants.TOP);
hinweis.setHorizontalAlignment(SwingConstants.CENTER);
hinweis.setBounds(21, 187, 300, 100);
contentPane.add(hinweis);
// Diese innere Klasse kann auf Klicks reagieren -> Berechnung des Verbrauchs/der Strecke
//Problem scheint irgendwo bei a zu liegen
class BerechnenAufpasser implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s;
s = txtEingabe.getText(); // Hole den Text aus dem Eingabefeld
double a = Double.parseDouble(s); //Ziffernfolge umwandeln, sodass damit gerechnet werden kann
double b = 0.057;
double endergebnis = 0;
if (e.getSource() == rdbtnStreckeBerechnen) { //wenn StreckeBerechnenButton gedrückt, dann
endergebnis = a / b; // Formel für Ergebnisberechnung
} else if (e.getSource() == rdbtnVerbrauchBerechnen) { //wenn VerbrauchBerechnenButton gedrückt
endergebnis = a * b; // Zahlen multiplizieren; Ergebnis steht in endergebnis
}
s = Double.toString(endergebnis); // Ergebniswert in Text umwandeln
txtErgebnis.setText(s); // Ergebnistext in das Ergebnisfeld schreiben
}
};
JButton btnBerechnen = new JButton("Berechnen");//Button der Rechnung startet
btnBerechnen.addActionListener(new ActionListener() {//durch Drücken wird Hinweis (Label) angezeigt
public void actionPerformed(ActionEvent arg0) {
hinweis.setText("<html><body>Bitte beachten Sie, dass es sich bei dem<br>berechneten Wert um einen Durchschnittswert handelt und der tatsächliche Verbrauch je nach Geschwindigkeit, Beladung etc. abweichen kann<hmtl>");
}//Zeilenumbruch: "<html><body>....text..<br>...<html>"
});
btnBerechnen.setBounds(40, 153, 100, 23);
contentPane.add(btnBerechnen);
ActionListener berechnen_passAuf = new BerechnenAufpasser(); // Erzeuge einen Aufpasser
btnBerechnen.addActionListener(berechnen_passAuf); // Verbinde ihn mit dem Button "Berechnen"
}
}
Zuletzt bearbeitet: