Temperatur Umrechner gibt nur ein Ergebnis aus

PrismaKiste94

Neues Mitglied
Hallo liebe Community,
ich möchte, dass Java mit gleichzeitig das Ergebnis für Kelvin und Fahrenheit liefert, wenn ich auf den Button "Umrechnen" klicke. Mir gibt das Programm dann nur die Temperatur in °K an.
Außerdem möchte ich, dass sich das Fenster schließt, wenn man auf den Button Ende klickt. Wie kriege ich das hin?
Was mache ich falsch bzw was fehlt noch im Quellcode?

Java:
package gui;
import com.cloudgarden.layout.AnchorLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;



public class JFrame1 extends javax.swing.JFrame {

	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel("com.jgoodies.looks.plastic.Plastic3DLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	private JLabel jLFahrenheit;
	private JTextField jTFFahrenheit;
	private JLabel jLCelsius;
	private JTextField jTFCelsius;
	private JTextField jTFKelvin;
	private JLabel jLKelvin;
	private JButton BtnEnde;
	private JButton BtnUmrechnen;

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame1 inst = new JFrame1();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public JFrame1() {
		super();
		initGUI();
	}

	private void initGUI() {
		
		this.setTitle("Umrechung Fahrenheit in Celsius");
		
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				jLFahrenheit = new JLabel();
				getContentPane().add(jLFahrenheit);
				jLFahrenheit.setText("Grad Fahrenheit");
				jLFahrenheit.setBounds(12, 80, 93, 16);
			}
			{
				jTFFahrenheit = new JTextField();
				getContentPane().add(jTFFahrenheit);
				jTFFahrenheit.setBounds(12, 102, 150, 23);
			}
			{
				jLCelsius = new JLabel();
				getContentPane().add(jLCelsius);
				jLCelsius.setText("Grad Celsius");
				jLCelsius.setBounds(12, 18, 65, 16);
			}
			{
				jTFCelsius = new JTextField();
				getContentPane().add(jTFCelsius);
				jTFCelsius.setBounds(12, 40, 150, 23);
			}
			{
				BtnUmrechnen = new JButton();
				getContentPane().add(BtnUmrechnen);
				BtnUmrechnen.setText("Umrechnen");
				BtnUmrechnen.setBounds(237, 40, 127, 23);
				BtnUmrechnen.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						BtnUmrechnenActionPerformed(evt);
					}
					
			
				});
			}
			{
				BtnEnde = new JButton();
				getContentPane().add(BtnEnde);
				BtnEnde.setText("Ende");
				BtnEnde.setBounds(237, 102, 127, 23);

				
			}
			
			
			{
				jLKelvin = new JLabel();
				getContentPane().add(jLKelvin);
				jLKelvin.setText("Grad Kelvin");
				jLKelvin.setBounds(12, 143, 60, 16);
			}
			{
				jTFKelvin = new JTextField();
				getContentPane().add(jTFKelvin);
				jTFKelvin.setBounds(12, 165, 150, 23);
			}
			pack();
			this.setSize(392, 238);
		} catch (Exception e)
		 {
		
		    //add your error handling code here
			e.printStackTrace();
			
		} 
	
	}

		
			private void BtnUmrechnenActionPerformed(ActionEvent evt) {
		System.out.println("BtnUmrechnen.actionPerformed, event="+evt);
		
		
		
		double Celsius = 0;
		try {
			Celsius = Double.parseDouble(jTFCelsius.getText());
		} catch (NumberFormatException e) {
			Celsius = -1;
		}
		if (Celsius > - 273.15) {
	
		double Kelvin = Celsius2Kelvin(Celsius);	
						NumberFormat nf = NumberFormat.getInstance();						
						nf.setMaximumFractionDigits(10);						
						String ausgabe1 = nf.format(Kelvin) + "°K";			
						jTFKelvin.setText(ausgabe1);		}

		
		else if (Celsius > - 273.15) {
			
		double Fahrenheit = Celsius2Fahrenheit(Celsius);	
						NumberFormat nf = NumberFormat.getInstance();						
						nf.setMaximumFractionDigits(10);						
						String ausgabe2 = nf.format(Fahrenheit) + "°F";			
						jTFKelvin.setText(ausgabe2);		}


		 else
						jTFKelvin.setText("Fehler in der Eingabe");
		}
		
				
			public double Celsius2Fahrenheit(double Celsius) {
				double Fahrenheit = Celsius * 1.8 + 32;
				return Fahrenheit;
			}  

			public double Celsius2Kelvin(double Celsius) {
				double Kelvin = Celsius + 273.15;
				return Kelvin;
			}	
	
	}

Vielen Dank schon mal im Voraus
 
@gleichzeitig ausgeben:
Du darfst bei deiner Abfrage kein else if verwenden
Code:
if (a) {
 //1
} else if (a) {
//2
} else {
//3
}

So sieht das in deinem Beispiel aus...
Sprachlich ist das:
Wenn a, dann 1, sonst wenn a, dann 2, sonst 3

Du musst in die Klammer mit der Bedingung (=> Celcius>-275) beides reinschreiben, sowohl die Umrechnung und Ausgabe von Fahrenheit, als auch Kelvin

@Beenden:
Das kannst du auf zwei Arten machen.
Möglichkeit 1: Du beendest das Programm mit
Code:
System.exit(0);
Das beendet sofort den Ablauf des Programms. Das ist quasi eine sofort EXIT-Tür, was man, aufgrund verschiedener Gründe, z.B. weil es dem weiteren Ablauf des PCs stören KÖNNTE o.Ä., evtl. vermeiden sollte (Ich machs auch ab und zu, weils einfach schnell geht)

Möglichkeit 2: Du schließt das Fenster mit
Code:
dispose()
. Das ruft die Methode des Frames dispose() auf, die dafür sorgt, dass der nicht mehr angezeigt wird und lässt das Programm somit dann merken, dass da nichts mehr auszuführen ist.

Gruß eMmiE
 
Zuletzt bearbeitet:
Code:
if (Celsius > - 273.15) {   
        double Kelvin = Celsius2Kelvin(Celsius);   
        NumberFormat nf = NumberFormat.getInstance();                      
        nf.setMaximumFractionDigits(10);                       
        String ausgabe1 = nf.format(Kelvin) + "°K";        
        jTFKelvin.setText(ausgabe1);
        double Fahrenheit = Celsius2Fahrenheit(Celsius);   
        NumberFormat nf = NumberFormat.getInstance();                      
        nf.setMaximumFractionDigits(10);                       
        String ausgabe2 = nf.format(Fahrenheit) + "°F";        
        jTFKelvin.setText(ausgabe2);       
}  else {
       jTFKelvin.setText("Fehler in der Eingabe");
}

So sollte das funktionieren...

Was der mit dem Compilation problem meint war mir jetzt aber auch nicht einsichtig...

EDIT: liegt vllt. an der fehlenden geschwungenen Klammer nach dem else in der Methode initGUI()

Generell:
NumberFormat musst du nur einmal instanzieren.
Deklarier das mal lieber am Anfang deiner Klasse, wenn du weißt, dass du das sowieso brauchen wirst.
Das kannst du auch direkt im Konstruktor instanzieren und dann in den Methoden einfach nur noch benutzen.
Du brauchst weder zwei Strings für die Ausgabe, noch zwei doubles für die Berechnung. Das kannst du alles mit jeweils einer Variable machen -> Ein String ausgabe, eine double wert
Für die gilt das Gleiche, wie für das NumberFormat

Gruß eMmiE
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben