使用jcombobox返回对象或变量

时间:2014-04-28 18:36:30

标签: java arrays swing actionlistener jcombobox

我有2个组合框,我需要这样做,以便当从下拉列表中选择某些选项时,会输出某些结果。如何将某些字符串变量或对象与多个组合框选择关联起来。我不是要你为我做作业。只需指向正确的方向。

    public class gui extends JFrame implements ActionListener{

    String[] colour1 = {"red", "blue", "green", "orange", "brown","white", "black", "yellow", "purple", "pink"};
        String[] colour2 = {"red", "blue", "green", "orange", "brown","white", "black", "yellow", "purple", "pink"};

        JComboBox combo1 = new JComboBox(colour1);
        JComboBox combo2 = new JComboBox(colour2);

        JLabel message = new JLabel(); 
        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new GridLayout(0, 1));

    public gui() {

         panel.add(combo1);
        panel.add(combo2);
        panel.add(message);
        frame.add(panel);
}

我使用actionPerformed来捕获用户输入,然后输出特定结果。目前它只需要一个组合框的值并输出一个字符串。我怎么做2。

public void actionPerformed(ActionEvent e){
           if(e.getSource() == combo1){
               JCombobox cb = (JComboBox)e.getSource();
           String colours = (String) cb.getSelectedItem();

           switch(colours){
           case "red": message.setText("");
               break;
           case "blue": message.setText("");
               break;
           case "green": message.setText("");
               break;
           case "pink": message.setText("");
               break;
           case "purple":message.setText("");
               break;
           case "white": message.setText("");
               break;
           case "black": message.setText("");
               break;
           case "brown": message.setText("");
               break;
           case "orange": message.setText("");
               break;
           case "yellow": message.setText("");
               break;
           default: message.setText("");
           }
        }
    }

2 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,您可能不需要两个数组。当两个组合框都包含相同的值时,您可以将同一个数组传递给两个组合框。

实际问题似乎是针对如何根据两个组合框的选择组合执行特定操作。

我认为有两种选择:您可以将组合框存储为实例变量,也可以将组合框的选择存储为实例变量。由于您已经将组合框存储为实例变量,因此这应该更容易。所以你可以这样做:

@Override
public void actionPerformed(ActionEvent e)
{
    String color1 = (String)combo1.getSelectedItem();
    String color2 = (String)combo2.getSelectedItem();
    // Possibly check if either color is 'null' here

    if (color1.equals("blue") && color2.equals("yellow"))
    {
        message.setText("green");
    }
    ...
}

(注意:如果您现在打算编写一个嵌套的开关语句,如

switch(colour1)
{
    case "red": 
        switch(colour2)
        {
            // 10 cases...
        }
    break;

    // 10 x 10 cases...
}

你应该考虑一种不同的方法,取决于你想用这些颜色做什么 ...)

答案 1 :(得分:0)

您想要的是显示一个值,具体取决于两个组合框的选定值。 make combo1和combo2私有字段。编写一个私有方法来响应两个组合的动作事件。打开组合值。请注意,您可以直接访问这两个组合,因为它们是类字段