Salve a tutti,
Ho iniziato da poco con le interfacce grafiche in java e con gli eventi e sto facendo un programma per la conversione della temperatura.
Il problema è che una volta inseriti i valori nelle JTextField non riesce a calcolarmi nessun valore delle temperature (inoltre deve farlo non solo da un unità di misura alle altre, ma varia a seconda della cella in quale do l'input), ho fatto i metodi di conversione in una classe separata da quella 'Ascoltatore', e mi sto scontrando con un problema nel costruttore dentro il metodo 'actionPerformed' dal quale non riesco ad uscirne.
Avevo risolto inserendo le formule di conversione direttamente nella classe 'Ascoltatore', ma ho deciso di fare una classe a parte per non avere un codice troppo lungo nel metodo 'actionPerformed'.
Ecco le 2 classi :
Classe Conversione
public class Conversione {
private double celsius;
private double fahrenheit;
private double kelvin;
private double rankine;
private double k = 273.15;
private double r = 491.67;
public Conversione(double celsius, double fahrenheit, double kelvin, double rankine) {
this.celsius = celsius;
this.fahrenheit = fahrenheit;
this.kelvin = kelvin;
this.rankine = rankine;
}
public Conversione(double celsius) {
this.celsius = celsius;
}
public void convertiDaCelsius() {
fahrenheit = (9 / 5 * celsius) + 32;
kelvin = (celsius + k);
rankine = (float) ((celsius * 1.8) + r);
}
public void convertiDaFahrenheit() {
celsius = (fahrenheit - 32) / 1.8;
kelvin = (fahrenheit + 459.67) / 1.8;
rankine = (fahrenheit - 31) + 491.67;
}
public void convertiDaKelvin() {
celsius = kelvin - k;
fahrenheit = ((k * 1.8) - 459.67);
rankine = kelvin * 1.8;
}
public void convertiDaRankine() {
celsius = (rankine - r) * (5 / 9);
fahrenheit = (rankine - r) + 32;
kelvin = ((rankine - r) / 1.8) + k;
}
@Override
public String toString() {
return celsius + "";
}
public String getCelsius() {
return celsius + "";
}
public String getFahrenheit() {
return fahrenheit + "";
}
public String getKelvin() {
return kelvin + "";
}
public String getRankine() {
return rankine + "";
}
}
Classe Ascoltatore
public class Ascoltatore implements ActionListener {
String vuota = " ";
private JTextField cels;
private JTextField fahr;
private JTextField kelv;
private JTextField rank;
private Conversione cv;
public Ascoltatore(JTextField cels, JTextField fahr, JTextField kelv, JTextField rank) {
this.cels = cels;
this.fahr = fahr;
this.kelv = kelv;
this.rank = rank;
}
@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getActionCommand().equalsIgnoreCase("Calcola")) {
cv = new Conversione(
Double.parseDouble(this.cels.getText()),
Double.parseDouble(this.fahr.getText()),
Double.parseDouble(this.kelv.getText()),
Double.parseDouble(this.rank.getText()));
if (cels.getText().equalsIgnoreCase(vuota) && fahr.getText().equalsIgnoreCase(vuota)
&& kelv.getText().equalsIgnoreCase(vuota)) {
cv.convertiDaRankine();
cels.setText(cv.getCelsius());
fahr.setText(cv.getFahrenheit());
kelv.setText(cv.getKelvin());
}
if (cels.getText().equalsIgnoreCase(vuota) && fahr.getText().equalsIgnoreCase(vuota)
&& rank.getText().equalsIgnoreCase(vuota)) {
cv.convertiDaKelvin();
cels.setText(cv.getCelsius());
fahr.setText(cv.getFahrenheit());
rank.setText(cv.getRankine());
}
if (cels.getText().equalsIgnoreCase(vuota) && kelv.getText().equalsIgnoreCase(vuota)
&& rank.getText().equalsIgnoreCase(vuota)) {
cv.convertiDaFahrenheit();
cels.setText(cv.getCelsius());
kelv.setText(cv.getKelvin());
rank.setText(cv.getRankine());
}
if (fahr.getText().equalsIgnoreCase(vuota) && kelv.getText().equalsIgnoreCase(vuota)
&& rank.getText().equalsIgnoreCase(vuota)) {
cv.convertiDaCelsius();
fahr.setText(cv.getFahrenheit());
kelv.setText(cv.getKelvin());
rank.setText(cv.getRankine());
}
} else if (ae.getActionCommand().equalsIgnoreCase("Reset")) {
this.cels.setText(vuota);
this.fahr.setText(vuota);
this.kelv.setText(vuota);
this.rank.setText(vuota);
}
}
}