Umrechner mit Combobox/Switch Problem

Hysteria

Grünschnabel
Hallo Leute, ich (Java****) möchte einen Universalrechner in Java Netbeans bauen, der u.a. Temperatur Länge Gewicht ect umrechnen kann.


Über eine Combobox soll gewählt werden wie gerechnet werden soll. Für den Anfang Arbeite ich nur mir Celcius nach Fahrenheit und Fahrenheit nach Celsius.
Durch einen Eventlistener und darauffolgende Switch-Methode soll die Rechenart gewählt werden.
Tja und das bekomm ich nicht ganz hin.
Wenn ich den Button-Event in Switch 1 oder 2 kopiere kommen nur Fehler.
Ich muss vermutlich einen Befehl in den Switches auslösen der sich über den Buttonbefehl überträgt... aber welchen?

Schon malherzlichen Dank für eure Hilfe, bin mir ziemlich sicher wenn das geschafft ist komm ich ohne Schwierigkeiten weiter!






PHP:
  public class Rechner extends javax.swing.JFrame {

    /** Creates new form Rechner */
    public Rechner() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        tempEingabe = new javax.swing.JTextField();
        tempButton = new javax.swing.JButton();
        tempAusgabe = new javax.swing.JTextField();
        tempWahl = new javax.swing.JComboBox();
        ausgabe = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        tempButton.setText("Umrechnen");
        tempButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tempButtonActionPerformed(evt);
            }
        });

        tempWahl.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Celsius-Fahrenheit", "Fahrenheit-Celsius" }));
        tempWahl.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                tempWahlItemStateChanged(evt);
            }
        });

        ausgabe.setText("jLabel1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(144, 144, 144)
                        .addComponent(tempButton)
                        .addGap(27, 27, 27)
                        .addComponent(tempAusgabe, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(153, 153, 153)
                        .addComponent(tempWahl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(39, 39, 39)
                        .addComponent(tempEingabe, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(54, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(234, Short.MAX_VALUE)
                .addComponent(ausgabe)
                .addGap(132, 132, 132))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(38, 38, 38)
                .addComponent(tempWahl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(26, 26, 26)
                .addComponent(tempEingabe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(32, 32, 32)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tempButton)
                    .addComponent(tempAusgabe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(35, 35, 35)
                .addComponent(ausgabe)
                .addContainerGap(92, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void tempWahlItemStateChanged(java.awt.event.ItemEvent evt) {
int i= tempWahl.getSelectedIndex(); //Wahl welche Temperaturen umgerechnet werden sollen

switch (i)
{case 1:
   
     
     
     break;
 case 2:
     break;
    }
    }
    private void tempButtonActionPerformed(java.awt.event.ActionEvent evt) {
        String curAmountText = tempEingabe.getText();
       // Check for numbers only
       for(int i=0;i < curAmountText.length();i++)
       {
           if(!Character.isDigit(curAmountText.charAt(i)))
           {
               JOptionPane.showMessageDialog(this, "Please enter a valid amount!");
               tempEingabe.requestFocus();
               return;




    }
     else{  int tempFahr = (int)((Double.parseDouble(tempEingabe.getText()))
            * 1.8 + 32);
    ausgabe.setText(tempFahr + " Fahrenheit");

         
         
       }}}
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Rechner().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel ausgabe;
    private javax.swing.JTextField tempAusgabe;
    private javax.swing.JButton tempButton;
    private javax.swing.JTextField tempEingabe;
    private javax.swing.JComboBox tempWahl;
    // End of variables declaration

}
 
Kannst du uns einen gefallen tun und deinen Beitrag dahingehend ändern, dass du
1. Java-Tags benutzt statt PHP-Taggs
und
2. Du dir die Klassen importierst statt jedes mal die gesamten Klassenpfade anzugeben.
So wie der Code oben dargestellt ist finde ich es persönlich absolut schwierig zu lesen...
 
Hallo.

In der Funktion tempButtonActionPerformed willst du erst prüfen, ob es eine valide eingegebene Zahl ist - tust dies aber nur mit der ersten Ziffer und gehst dann in den else-Block und rechnest um. Eine Eingabe wie "32aewg32" würde als umgerechnet werden und einen Fehler hervorrufen.

Etwas leichter als mit der for-Schleife wäre es, einfach Double.parseDouble(tempEingabe.getText()) auszuführen und die eventuelle Exception abzufangen.

Ich versteh nicht ganz was du mit "Button-Event in Switch 1 oder 2 kopieren" meinst.
 
Ich versteh nicht ganz was du mit "Button-Event in Switch 1 oder 2 kopieren" meinst.

Ich nehme an er will einfach die untere Funktionaltät in einen Case reinpacken, dann wird es aber zu einem Fehler kommen, weil i sowohl für die Switch-Case Anweisung, als auch für die for-Schleife verwendet wird.
 
Hier zumindest mal ein besser lesbarer Code in JAVA-Tags:

Java:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Rechner extends JFrame {
    
    private JLabel ausgabe; 
    private JTextField tempAusgabe; 
    private JButton tempButton; 
    private JTextField tempEingabe; 
    private JComboBox tempWahl; 

    public Rechner() { 
        tempEingabe = new JTextField(); 
        tempButton = new JButton(); 
        tempAusgabe = new JTextField(); 
        tempWahl = new JComboBox(); 
        ausgabe = new JLabel(); 

        setDefaultCloseOperation(EXIT_ON_CLOSE); 

        tempButton.setText("Umrechnen"); 
        tempButton.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent evt) { 
                tempButtonActionPerformed(evt); 
            } 
        }); 

        tempWahl.setModel(new DefaultComboBoxModel(new String[] { "Celsius-Fahrenheit", "Fahrenheit-Celsius" })); 
        tempWahl.addItemListener(new ItemListener() { 
            public void itemStateChanged(ItemEvent evt) { 
                tempWahlItemStateChanged(evt); 
            } 
        }); 

        ausgabe.setText("jLabel1"); 

        GroupLayout layout = new GroupLayout(getContentPane()); 
        getContentPane().setLayout(layout); 
        layout.setHorizontalGroup( 
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(layout.createSequentialGroup() 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
                    .addGroup(layout.createSequentialGroup() 
                        .addGap(144, 144, 144) 
                        .addComponent(tempButton) 
                        .addGap(27, 27, 27) 
                        .addComponent(tempAusgabe, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)) 
                    .addGroup(layout.createSequentialGroup() 
                        .addGap(153, 153, 153) 
                        .addComponent(tempWahl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
                    .addGroup(layout.createSequentialGroup() 
                        .addGap(39, 39, 39) 
                        .addComponent(tempEingabe, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE))) 
                .addContainerGap(54, Short.MAX_VALUE)) 
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
                .addContainerGap(234, Short.MAX_VALUE) 
                .addComponent(ausgabe) 
                .addGap(132, 132, 132)) 
        ); 
        layout.setVerticalGroup( 
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(layout.createSequentialGroup() 
                .addGap(38, 38, 38) 
                .addComponent(tempWahl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
                .addGap(26, 26, 26) 
                .addComponent(tempEingabe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
                .addGap(32, 32, 32) 
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
                    .addComponent(tempButton) 
                    .addComponent(tempAusgabe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
                .addGap(35, 35, 35) 
                .addComponent(ausgabe) 
                .addContainerGap(92, Short.MAX_VALUE)) 
        ); 
        pack(); 
    }

    private void tempWahlItemStateChanged(ItemEvent evt) { 
        int i= tempWahl.getSelectedIndex(); //Wahl welche Temperaturen umgerechnet werden sollen 
        switch (i){
            case 1: 
            break; 
            case 2: 
            break; 
        } 
    } 
    
    private void tempButtonActionPerformed(ActionEvent evt) { 
        String curAmountText = tempEingabe.getText(); 
        // Check for numbers only 
        for(int i=0; i < curAmountText.length(); i++){ 
           if(!Character.isDigit(curAmountText.charAt(i))){ 
               JOptionPane.showMessageDialog(this, "Please enter a valid amount!"); 
               tempEingabe.requestFocus(); 
               return; 
            } 
            else{
               int tempFahr = (int)((Double.parseDouble(tempEingabe.getText())) * 1.8 + 32); 
                ausgabe.setText(tempFahr + " Fahrenheit"); 
            }
        }
    } 

    public static void main(String args[]) { 
        EventQueue.invokeLater(new Runnable() { 
            public void run() { 
                new Rechner().setVisible(true); 
            } 
        }); 
    } 

}
 
Ich habe den Button Action Event korrigiert und die If-Anweisung gelöscht.


Also nochmals zum eigentlichen Problem. Ich habe eine Combox mit 2 Werten. (Celsius-Fahrenheit; Fahrenheit zu Celsius)

Je nachdem welcher Wert in der Combobox angewählt wird ändert sich die RechenFormel, welche wiederum durch den Button ausgelöst werden soll:

Java:
 private void tempButtonActionPerformed(java.awt.event.ActionEvent evt) {
      String curAmountText = tempEingabe.getText();
    Double eingabeWert;
    try
    {
      // Check for numbers only
      eingabeWert = Double.parseDouble(curAmountText);
    }
    catch(NumberFormatException e)
    {
      JOptionPane.showMessageDialog(this, "Bitte Zahl eingeben");
      tempEingabe.requestFocus();
      return;

int tempFahr = (int)((Double.parseDouble(tempTextField.getText()))
            * 1.8 + 32);
   tempAusgabe.setText(tempFahr + " Fahrenheit");

Die Formel die von der Combobox abhängig gemacht werden soll ist in Zeile 15/16



Ich dachte daran das irgendwie mit ner Swich zu machen aber wie genau weiß ich nicht.
 
Hi,

Überprüf doch einfach den Wert der ComboBox und je nachdem wählst du eine andere Formel.
Java:
if(combobox.getSelectedIndex() == 0) { //0 oder wo dein "Celsius" halt steht. 
//Alternativ: ((JLabel) combobox.getSelectedItem()).getText().equals("Celsius")
    //berechne Temperatur Celsius..
} else {
    //berechne Temperatur Fahrenheit..
}

Gruß,
Martin
 
Ich dachte daran das irgendwie mit ner Swich zu machen aber wie genau weiß ich nicht.

Na so wie dein Ansatz oben, nur brauchst du dafür keinen ItemListener, du fragst einfach in actionPerformed, den aktuell selektierten Wert ab...
Die beiden Zeilen gehören dann entsprechenden in die Switch-Case Anweisung:
Java:
int tempFahr = (int)((Double.parseDouble(tempTextField.getText()))
            * 1.8 + 32);
   tempAusgabe.setText(tempFahr + " Fahrenheit");
 

Neue Beiträge

Zurück