2016-01-09 2 views
0

J'ai créé une fenêtre JFrame avec un JComboBox. Je peux sélectionner des choses mais elles ne font rien. Je pensais que event était un String, mais ce n'est pas le cas. Quelle est la solution pour cela?Comment créer une chaîne avec le résultat d'un menu déroulant?

import java.awt.FlowLayout; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

import javax.swing.Icon; 
import javax.swing.ImageIcon; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class Gui extends JFrame { 
    private JComboBox box; 
    private JLabel picture; 

    private static String[] filename = {"", "b.png", "x.png"}; 

    public Gui() { 
     super("the title"); 
     setLayout(new FlowLayout()); 
     box = new JComboBox(filename); 
     box.addItemListener(
       new ItemListener() { 
        public void itemStateChanged(ItemEvent event) { 
         if(event.getStateChange()==ItemEvent.SELECTED){ 
          System.out.println("test"); 
          if(event=="b.png") { 
           System.out.println("test2"); 
          } 
         } 
        } 
       }); 
     add(box); 
    } 
} 
+0

Comparez 'String's avec' equals', pas avec '=='. – user1803551

+0

Vous voulez dire: if (event.equals ("b.png")) { –

+0

Ne comparez pas les chaînes en utilisant '==' ou '! ='. Utilisez la méthode 'equals (...)' ou la méthode 'equalsIgnoreCase (...)' à la place. Comprenez que '==' vérifie si les deux * références d'objet * sont identiques ce qui n'est pas ce qui vous intéresse. Les méthodes d'un autre côté vérifient si les deux Strings ont les mêmes caractères dans le même ordre, et c'est ce que questions ici. –

Répondre

3

Vous devez obtenir l'élément sélectionné (qui est un String dans votre cas) et le comparer à votre chaîne avec equals:

if ("b.png".equals(event.getItem())) 

Notez que cela est préférable à

event.getItem().equals("b.png") 

puisque cela peut théoriquement lancer un NPE.

De même, utilisez un type générique: JComboBox<String>, et non le type brut.