2017-07-15 2 views
0

Je suis très nouveau sur Java et je suis en train de prendre une classe Java 1. J'essaie d'utiliser une sélection JComboBox dans une instruction if et ensuite afficher une réponse basée sur la sélection dans un JTextField. Tout a été compilé correctement mais la réponse ne s'affichera pas et je ne sais pas ce que je dois changer. J'ai cherché et essayé plusieurs choses différentes mais aucune ne semblait fonctionner.La réponse à l'équation ne sera pas transmise à JTextField avec l'utilisation de CoomboBox si statements

import javax.swing.*; 
import java.awt.event.*; 

public class HayDyGuiTempConv extends JFrame 
{ 

public static void main(String[] args) 
{ 
    new HayDyGuiTempConv(); 
} 

private JButton buttonConvert; 
private JButton exitButton; 
private JTextField textAmount; 
private String fieldText; 
private JTextField field; 



public HayDyGuiTempConv() 
{ 

    this.setSize(440,150); 
    this.setLocation(350,420); 
    this.setTitle("Temperature Conversion"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    ButtonListener bl = new ButtonListener(); 
    JPanel panel1 = new JPanel(); 
    panel1.add(new JLabel("Enter temperature to convert: ")); 

    textAmount = new JTextField(6); 
    panel1.add(textAmount); 

    JComboBox<String> comboBox = new JComboBox<> (new String[] {"C to F", "F to C"}); 
    comboBox.addActionListener(bl); 
    panel1.add(comboBox); 

    buttonConvert = new JButton("Convert"); 
    buttonConvert.addActionListener(bl); 
    buttonConvert.setToolTipText("Convert the temperature."); 
    panel1.add(buttonConvert); 

    panel1.add(new JLabel("Temp: ")); 

    field = new JTextField(6); 
    field.setEditable(false); 
    panel1.add(field); 

    exitButton = new JButton("Exit"); 
    exitButton.addActionListener(bl); 
    exitButton.setToolTipText("Exit the program."); 
    panel1.add(exitButton); 

    this.add(panel1); 

    this.setVisible(true); 
} 

private class ButtonListener implements ActionListener 
{ 

    public void actionPerformed(ActionEvent e) 
    { 


     if(e.getSource() == buttonConvert) 
     { 

      if(e.getSource() == ("C to F")) 
      { 
       double tempEntered = Double.parseDouble(textAmount.getText()); 
       double tempConverted = tempEntered - 32 * (5/9); 
       String tempAmount = (Double.toString(tempConverted)); 
       field.setText(tempAmount); 
      } 
      else if(e.getSource() == ("F to C")) 
      { 
       double tempEntered = Double.parseDouble(textAmount.getText()); 
       double tempConverted = tempEntered * (9/5) + 32; 
       String tempAmount = (String.format("%.2f",(tempConverted))); 
       field.setText(tempAmount); 
      } 
     } 
     else if(e.getSource() == exitButton) 
     { 
      System.exit(0); 
     } 
    } 
} 
} 

Edit: j'ai essayé deux suggestions et les deux quand je tape dans un nombre et essayer de convertir je reçois ce dans le volet interactions: Exception dans le thread « AWT-EventQueue-0 » java.lang. ClassCastException: javax.swing.JButton ne peut pas être jeté à javax.swing.JComboBox

Répondre

1
if(e.getSource() == ("C to F")) 

la « source » de l'événement est un composant, pas une chaîne. Dans ce cas, il s'agit du JComboBox.

Vous voulez tester la valeur sélectionnée de la zone de liste déroulante de sorte que le code doit être quelque chose comme:

JComboBox comboBox = (JComboBox)e.getSource(); 
int index = comboBox.getSelectedIndex(); 

If (index == 0) 
    // do C to F conversion 
else 
    // do F to C conversion 

En outre, ne pas utiliser « == » pour comparer les valeurs de chaîne. Dans le futur pour la comparaison de chaînes, vous utilisez la méthode equals(...) de la chaîne.

Edit:

Je pensais que vous ajoutiez l'ActionListener au combobox. Ensuite, vous pouvez simplement effectuer automatiquement la conversion lorsque l'élément est sélectionné dans la zone de liste déroulante. Il n'y a pas besoin du bouton.

Si vous souhaitez conserver le bouton, vous devez définir votre zone de liste modifiable en tant que variable d'instance dans votre classe. Ensuite, vous pouvez simplement accéder à la zone de liste déroulante par son nom.

+0

J'ai effectué mon code avec votre suggestion et maintenant je reçois beaucoup de texte en rouge lorsque je tente de convertir qui dit DButton ne peut pas être jeté à javax.swing.JComboBox. Voici l'exception: Exception dans le fil "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JButton ne peut pas être converti en javax.swing.JComboBox –

+0

@DylanHayes voir modification. – camickr

+0

Merci beaucoup. J'avais besoin de garder le bouton alors j'ai ajouté la variable d'instance et cela a fonctionné. –

0

N'utilisez pas == lorsque vous comparez des chaînes car cela ne compare pas les valeurs mais les instances. Récupère la valeur String de comboBox avec comboBox.getSelectedItem(). ToString(); , puis comparez-les avec la méthode .equals().

Généralement le == sera utilisé pour comparer des nombres ou des instances;

String selected = comboBox.getSelectedItem().toString(); 

if(selected.equals("C to F")){ 
// do C to F conversion 
}else{ 
// do F to C conversion 
} 
+0

J'ai édité mon code avec votre suggestion et maintenant je reçois beaucoup de texte rouge quand j'essaye de convertir qui dit que JButton ne peut pas être converti en javax.swing.JComboBox. Voici l'exception: Exception dans le thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JButton ne peut pas être converti en javax.swing.JComboBox - –