Umrechner mit Combobox/Switch Problem

Anleitungen, Beispiele und Hilfestellungen zu NetBeans

Moderator: wegus

Antworten
Hysteria1
Beiträge: 1
Registriert: 28.07.2011, 00:30

Umrechner mit Combobox/Switch Problem

Beitrag von Hysteria1 » 28.07.2011, 00:36

Hallo Leute, ich (Javanoob) 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!


Code: Alles auswählen

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

}

Benutzeravatar
nigjo
Beiträge: 607
Registriert: 08.09.2009, 09:43
Wohnort: Aachen
Kontaktdaten:

Re: Umrechner mit Combobox/Switch Problem

Beitrag von nigjo » 28.07.2011, 08:47

Hi

Zunächst solltest du deinen Actionlistener (das Teil für den Button) so umschreiben:

Code: Alles auswählen

  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, "Please enter a valid amount!");
      tempEingabe.requestFocus();
      return;
    }
    double tempFahr = eingabeWert.doubleValue() * 1.8 + 32;
    ausgabe.setText((int)tempFahr + " Fahrenheit");
  }
Die Schleife ist ehr hinderlich und bei dir auch noch falsch. Die Methoden "Double.parseDouble" bzw. "Integer.parseInt" werfen eine NumberFormatException, wenn der String nicht ausgewertet werden kann. Das ist viel eleganter als jedes Zeichen einzeln abzufragen. (Hast du vorher C programmiert?)

2. Korrektur zu meiner eben genannten Vermutung. Deine switch-Anweisung (oder besser die case Ausdrücke) sagen mir, du hast vorher VisualBasic programmiert. In Java fangen Indizies immer bei 0 an, nicht bei 1.

3. Kurzer Hinweis für Hilfestellungen hier: Fehlermeldungen haben einen Sinn. Wenn sie auftreten erzählen sie dir (oft) genau, was schief gelaufen ist. Ignoriere sie nicht: "Tut nicht" ist eine scheiß Fehlerbeschreibung. Fehler sind dazu da, gemacht zu werden, aber man sollte aus ihnen lernen. (Nun aber genug Sprüche geklopft)

4. "Befehle" sind in Java "Methoden". Sie werden nicht "ausgelöst" sondern "aufgerufen".

Gruß
Jens
Man sollte seine Werkzeuge kennen. Ansonsten haut man sich mit dem Hammer nur auf die Finger.

--
NetBeans Certified Engineer - Java Getriebe

Antworten