0

一个非常愚蠢的问题,所以它对你来说应该是一个简单的答案。我这里有一些代码:

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

用户在 JComboBox 中选择的选项有:“Critical”、“Major”和“Minor”。

如何获得它,以便如果用户从 ComboBox 中选择“Major”,我可以让它打印出“red”而不是使用打印出“Major”的 getSelectedItem()?

预先感谢您的帮助!

4

2 回答 2

1

只需更改您要返回的值:

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);
  }
}
于 2013-04-02T21:24:59.353 回答
1

OOP建议使用表示“状态名称”和“状态颜色”的特定对象。例如,此类可能如下所示:

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

现在,您可以使用上述类的实例构建组合框。请看我的例子:

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

如您所见,我将颜色和名称绑定在一个类中。我创建了这个类的 3 个实例并将其传递给JComboBox<Item>构造函数。
我们可以使用Map类来链接这些属性,但我认为特定类是最好的解决方案。

于 2013-04-02T21:42:59.950 回答