Conversion Celsius Fahrenheit Java


J'ai du mal à comprendre pourquoi mon application ne s'exécutera pas. Je viens de commencer à utiliser la programmation récemment.

L'erreur principale que je reçois est avec le FahrenHandler mais je ne sais pas où placer mon gestionnaire d'événements et mon écouteur d'action pour cette classe.

Voici mes deux fichiers java qui font partie du paquet ConverterT:

ConverterFrame.java

package ConverterT;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Ahmed
 */
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JOptionPane;

public class ConverterFrame extends JFrame {

    private final JTextField celciusField; // text field for celcius
    private final JLabel celciusLabel; //label for celcius
    private final JTextField fahrField; //text field for fahrenheit
    private final JLabel fahrLabel; //label for fahr

    private double celsius, fahrenheit;

    //Action Listener definition for textFields
//ConverterFrame constructor adds JTextFields to JFrame
    public ConverterFrame() {

        super("Temperature");
        setLayout(new FlowLayout());

        //construct textfield with columns
        celciusField = new JTextField(10);
        add(celciusField); //add textField1 to JFrame

        celciusLabel = new JLabel("Enter Degrees in Celcius");
        add(celciusLabel); //add textField2 to JFrame

        fahrField = new JTextField(10);
        add(fahrField); // add fahr field to JFrame

        fahrLabel = new JLabel("Enter Degrees in Fahrenheit");
        add(fahrLabel); //add fahr Label to JFrame

        //register event handlers
        CelsHandler handlerCelcius = new CelsHandler();
        celciusField.addActionListener(handlerCelcius);

        FahrenHandler handlerFahren = new FahrenHandler();
        fahrField.addActionListener(handlerFahren);

    }// end ConverterFrame constructor

    //private inner class for event handling
    private class CelsHandler implements ActionListener {

        @Override
        //process textfield events

        public void actionPerformed(ActionEvent event) {

            //user pressed enter in JTextField celciusField
            celsius = Double.parseDouble(celciusField.getText());

            //calculate the equivalent temp in fahrenheit
            fahrenheit = 9.0 / 5.0 * celsius + 32;

            //Display the result in fahrenheit field
            fahrField.setText(String.format("%.2f", fahrenheit));
        }

        FahrenHandler handlerFahren = new FahrenHandler();

        private class FahrenHandler implements ActionListener {

            @Override

            public void actionPerformed(ActionEvent event) {

                //Get the data from the text field once the user presses enter
                celsius = Double.parseDouble(celciusField.getText());

                //Calculate the equivalent temp in fahrenheit
                fahrenheit = 5.0 / 9.0 * (celsius - 32);

                //Display the result in celsiusField
                celciusField.setText(String.format("%.2f", celsius));
            }

        }

    }
}

/*       if(event.getSource() == celciusField)
 int tempFahr = (int) ((Double.parseDouble(celciusField.getText())) * 1.8 + 32);
 event.getActionCommand());

 //user pressed Enter in JTextField fahrField
 else if (event.getSource() == fahrField)
 int tempCel = (int) ((5.0/9.0 * (((Double.parseDouble(fahrField.getText())) -32))));  
 event.getActionCommand());

 //display JTextField content
 JOptionPane.showMessageDialog(ConverterFrame.this, string);
 */


ConverterTest.Java

package ConverterT;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Ahmed
 */
import javax.swing.JFrame;

public class ConverterTest {

    public static void main(String[] args) {

        ConverterFrame converterFrame = new ConverterFrame();
        converterFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        converterFrame.setSize(350, 100);
        converterFrame.setVisible(true);

    }

}//end class ConverterTest
Author: ahms, 2016-01-10

2 answers

Je ne sais pas quelle erreur vous recevez, mais vous avez rendu cette façon plus difficile que ce dont vous avez besoin. Faites simplement quelque chose comme ceci:

import java.util.Scanner;
import java.io.*;

public class HelloWorld{

     public static void main(String []args){
        Scanner scan = new Scanner(System.in);

        System.out.println("Enter the temperature in Fahrenheit to convert to Celsius: ");
        double fahTemp = scan.nextDouble();

        System.out.println("Enter the temperature in Celsius to convert to Fahrenheit: ");
        double celTemp = scan.nextDouble();

        double fahrenheit = (celTemp * (1.8)) + 32;
        double celsius = (fahTemp - 32) * (0.555);

        System.out.println(fahrenheit);
        System.out.println(celsius);
     }
}
 0
Author: mur7ay, 2016-01-09 22:28:52

J'ai essayé votre code sur mon pc local et j'ai vu que vous essayez de créer un objet de classe interne à partir du constructeur de sa classe externe. Le problème dans votre code est;

  public ConverterFrame() {

    super("Temperature");
    setLayout(new FlowLayout());

    //construct textfield with columns
    celciusField = new JTextField(10);
    add(celciusField); //add textField1 to JFrame

    celciusLabel = new JLabel("Enter Degrees in Celcius");
    add(celciusLabel); //add textField2 to JFrame

    fahrField = new JTextField(10);
    add(fahrField); // add fahr field to JFrame

    fahrLabel = new JLabel("Enter Degrees in Fahrenheit");
    add(fahrLabel); //add fahr Label to JFrame

    //register event handlers
    CelsHandler handlerCelcius = new CelsHandler();
    celciusField.addActionListener(handlerCelcius);


    ConverterFrame cf = new ConverterFrame();

    FahrenHandler handlerFahren = new FahrenHandler();
    fahrField.addActionListener(handlerFahren);

}

Vous devez supprimer cette partie du constructeur.

FahrenHandler handlerFahren = new FahrenHandler();
fahrField.addActionListener(handlerFahren);
 0
Author: Bernhard Colby, 2016-01-09 22:35:48