2017-04-03 3 views
0

Ich bin neu in Java und ich versuche, ein einfachen Anfänger Programm zu machen, die Eingabe der Temperatur und gibt sie in Celsius umgerechnet in den Nutzer entsprechen. Ich denke, ich habe etwas falsch angeschlossen mit den Zuhörern obwohl, weil es eine Ausgabe gibt, aber ist es immer Null. Ich bin mir nicht sicher, was ich falsch gemacht habe mit den Listenern und den Aktionsereignissen.Java Swing/JFrame Hörer

enter image description here

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
public class TemperatureConversionJFrame extends JFrame{ 
private final JTextField temperatureF; 
private final JLabel result; 
public int fahrenheit = 0; 

public TemperatureConversionJFrame(){ 
    super("Celsius Conversion"); 
    setLayout(new FlowLayout()); 
    temperatureF = new JTextField("Enter temperature in fahrenheit to be converted"); 
    add(temperatureF); 
    result = new JLabel("Result in Celsius"); 
    add(result); 


    TextFieldHandler handler = new TextFieldHandler(); 

    temperatureF.addActionListener(handler); 

} 

private class TextFieldHandler implements ActionListener{ 

@Override 
    public void actionPerformed(java.awt.event.ActionEvent evt){ 
     int F; 
    int results; 
      F = Integer.parseInt(temperatureF.getText()); 
      results = 5/9 * (F - 32); 
result.setText(String.valueOf(results)); 
    } 
} 

import javax.swing.JFrame; 

public class TemperatureConversionJFrameTest 
{ 
public static void main(String[] args) 
{ 
    TemperatureConversionJFrame temperatureConversionJFrame = new TemperatureConversionJFrame(); 
      temperatureConversionJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
temperatureConversionJFrame.setSize(275, 100); 
temperatureConversionJFrame.setVisible(true); 
} 

Antwort

2

Ich glaube, ich habe etwas falsch angeschlossen mit den Zuhörern

Nun das erste, was ist zu tun, um eine System.out.printin hinzufügen (...) an den Listener-Code, um zu sehen, ob der Listener aufgerufen wird.

Unter der Annahme, es aufgerufen wird, dann würde ich das Problem erraten ist:

results = 5/9 * (F - 32); 

Sie tun Integer-Division so 5/9 ist immer 0.

Ein Update ist wie etwas zu verwenden:

Auch ein ActionListener für das Textfeld wird nur aufgerufen, wenn die Eingabetaste gedrückt wird.

Möglicherweise möchten Sie eine DocumentListener verwenden. Dies wird immer dann aufgerufen, wenn Text im Textfeld hinzugefügt oder entfernt wird.

Lesen Sie den Abschnitt aus dem Swing-Tutorial auf How to Write a DocumentListener für weitere Informationen und Beispiele.

+0

Ah. Das habe ich komplett vermisst. Danke, es war nur die Logik, die es 0 angezeigt hatte. –

+1

@MichaelFogarty, Deshalb sollte grundlegende Debugging wie die Anzeige der Wert von Berechnungen verwendet werden. Es hilft Ihnen, einzuschränken, wo das Problem liegt, anstatt zu raten. – camickr

+0

Ich werde die Antwort akzeptieren, sobald es mir erlaubt. Vielen Dank! –