2017-04-03 4 views
0

Listeners Je suis nouveau à Java et je suis en train de faire un simple programme débutant qui prend les utilisateurs d'entrée de la température et le sort converti en celsius. Je pense que j'ai quelque chose de mal connecté avec les auditeurs mais parce qu'il donne une sortie mais c'est toujours zéro. Je ne suis pas vraiment sûr de ce que j'ai fait de mal avec les auditeurs et les événements d'action.Java Swing/JFrame

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); 
} 

Répondre

2

je pense avoir quelque chose accroché mal avec les auditeurs

Eh bien la première chose à faire est d'ajouter un System.out.println (...) au code de l'écouteur afin de voir si l'écouteur est appelé.

En supposant qu'il est invoqué alors je suppose que le problème est:

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

Vous faites la division entière si 5/9 est toujours 0.

Une solution est d'utiliser quelque chose comme:

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

En outre, un ActionListener sur le champ de texte n'est invoqué que lorsque la touche Entrée est enfoncée. Vous pouvez envisager d'utiliser un DocumentListener. Ceci est invoqué chaque fois que du texte est ajouté ou supprimé dans le champ de texte.

Lisez la section du tutoriel Swing sur How to Write a DocumentListener pour plus d'informations et d'exemples.

+0

Ah. J'ai complètement manqué ça. Merci, c'était juste la logique qui l'a fait afficher 0. –

+1

@MichaelFogarty, C'est pourquoi le débogage de base comme l'affichage de la valeur des calculs doit être utilisé. Il vous aide à affiner le problème au lieu de deviner. – camickr

+0

Je vais accepter la réponse dès qu'elle me le permettra. Merci! –