2013-04-02 1 views
0

Une question plutôt noobish donc ce devrait être une réponse facile pour vous. J'ai un code ici:JComboBox sélection d'une variable

 //Severity Row 
    severity = new JLabel("Severity:"); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 0; 
    c.gridy = 4; 
    c.gridwidth = 1; 
    pane.add(severity, c); 

    severityBox = new JComboBox(SEVERITY); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 1; 
    c.gridy = 4; 
    c.gridwidth = 1; 
    pane.add(severityBox, c); 
    severityBox.addActionListener(this); 

Les options pour l'utilisateur de choisir dans le JComboBox sont: « critique », « Major » et « mineure ».

Comment l'obtenir de sorte que si l'utilisateur sélectionne «Major» de la zone de liste déroulante, je peux l'imprimer «rouge» plutôt que d'utiliser getSelectedItem() qui affiche «Major»?

Merci d'avance pour l'aide!

Répondre

1

il suffit de changer la valeur que vous souhaitez revenir:

private String sValue; 
@Override 
public void actionPerformed(ActionEvent evt) 
{ 
    if (evt.getSource() == severityBox) 
    { 
    sValue = (String)severityBox.getSelectedItem(); 
    if ("Major".equals(sValue)) 
    { 
     sValue = "Red"; 
    } 
    System.out.println(sValue); 
    } 
} 
1

OOP suggère d'utiliser l'objet spécifique qui représente « le nom de l'état » et « couleur de statut ». Par exemple, cette classe pourrait ressemble à ceci:

class Item { 

    private String name; 
    private String color; 

    public Item(String name, String color) { 
     this.name = name; 
     this.color = color; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getColor() { 
     return color; 
    } 

    public void setColor(String color) { 
     this.color = color; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 
} 

Maintenant, vous pouvez construire en utilisant combobox instances de la classe ci-dessus. S'il vous plaît voir mon exemple:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JComboBox; 
import javax.swing.JFrame; 

public class SourceCodeProgram { 

    public static void main(String argv[]) throws Exception { 
     JComboBox<Item> comboBox = new JComboBox<Item>(new Item[] { 
       new Item("Major", "red"), new Item("Critical", "dark"), 
       new Item("Minor", "green") }); 
     comboBox.addActionListener(new ActionListener() { 

      @SuppressWarnings("unchecked") 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JComboBox<Item> comboBox = (JComboBox<Item>) e.getSource(); 
       Item item = (Item) comboBox.getSelectedItem(); 
       System.out.println(item.getColor()); 
      } 
     }); 
     JFrame frame = new JFrame(); 
     frame.add(comboBox); 
     frame.pack(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

Comme vous pouvez le voir, je lie la couleur et le nom dans une classe. Je crée 3 instances de cette classe et le passe dans le constructeur JComboBox<Item>.
Nous pouvons utiliser la classe Map pour lier ces propriétés mais la classe spécifique est la meilleure solution, je pense.