El problema es el siguiente:
Tengo que hacer una aplicación que convierta de grados Celsius a Fahrenheit interactuando con un JPanel
, unos JTextField
o y un JButton
. El problema que tengo es que cuando introduzco un número en el JTextField
de grados Celsius me hace bien el cálculo, es decir, calcula el Fahrenheit en función del Celsius. Para hacerlo a viceversa, no lo hace.
public class Ventana extends JFrame {
JPanel jp;
JTextField cajaCelsius;
JTextField cajaFarenheit;
JLabel etiquetaCelsius;
JLabel etiquetaFarenheit;
JButton conversion;
double gradosFarenheit = 0.0;
double gradosCelsius = 0.0;
public Ventana() {
setSize(400, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Conversion de celsius a farenheit y viceversa");
inicioComponentes();
}
private void inicioComponentes() {
jp = new JPanel();
jp.setLayout(null); //Ponemos a null el diseño predeterminado Layout
Etiquetas();
cajaEscribir();
Botones();
this.getContentPane().add(jp); //Añadimos al panel de la ventana
}
private void Etiquetas() {
etiquetaCelsius = new JLabel();
etiquetaCelsius.setText("Celsius:");
etiquetaCelsius.setBounds(70, 0, 100, 100);
etiquetaFarenheit = new JLabel();
etiquetaFarenheit.setText("Farenheit:");
etiquetaFarenheit.setBounds(50, 30, 100, 100);
jp.add(etiquetaCelsius);
jp.add(etiquetaFarenheit);
}
private void Botones() {
conversion = new JButton();
conversion.setBounds(170, 100, 100, 50);
conversion.setText("Conversion");
jp.add(conversion);
ActionListener al = new ActionListener() {
double grados;
@Override
public void actionPerformed(ActionEvent e) {
try {
System.out.println("iee");
//Si escribe sobre el Celsius
if (cajaCelsius.getText() != "0.0") {
grados = Double.parseDouble(cajaCelsius.getText());
gradosFarenheit = (grados * (9.0 / 5.0)) + 32;
System.out.println("Estic al primer if, grausTeclat: "+grados+", grausFarenheit: "+gradosFarenheit);
String s = (""+gradosFarenheit);
cajaFarenheit.setText(s);
System.out.println("Farenheit: "+gradosFarenheit);
}
//Si escribe sobre el Farenheit
else if (cajaFarenheit.getText() != "32.0") {
System.out.println("has tocar es farenheit");
grados = Double.parseDouble(cajaFarenheit.getText());
gradosCelsius = ((grados - 32.0) * (5.0 / 9.0));
System.out.println("Estic al segon if, grausTeclat: "+grados+", grausCelsius: "+gradosCelsius);
String s = (""+gradosCelsius);
cajaCelsius.setText(s);
System.out.println("Celsius: "+gradosCelsius);
}
} catch (NumberFormatException a) {
System.out.println("estic a s'exception");
cajaCelsius.setText("0.00");
cajaFarenheit.setText("32.00");
}
}
};
conversion.addActionListener(al);
}
private void cajaEscribir() {
cajaCelsius = new JTextField();
cajaCelsius.setBounds(120, 40, 250, 20);
cajaCelsius.setText("0.0");
cajaFarenheit = new JTextField();
cajaFarenheit.setBounds(120, 70, 250, 20);
cajaFarenheit.setText("32.0");
jp.add(cajaCelsius);
jp.add(cajaFarenheit);
}
}
Si ejecutas el código funciona perfectamente. A lo mejor en la parte del ActionListener
no he puesto el if-else
bien pero, si estuviera mal, no me entraría ni en el primero.