【问题标题】:Using jcombobox to return object or variable使用 jcombobox 返回对象或变量
【发布时间】:2014-04-28 18:36:30
【问题描述】:

我有 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 种不同的颜色相关联。每个案例都有不同的输出消息,我刚刚写过。

标签: java arrays swing actionlistener jcombobox


【解决方案1】:

正如 cmets 中所指出的,您可能不需要两个数组。当两个组合框应该包含相同的值时,您可以将相同的数组传递给两个组合框。

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

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

@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 语句,例如

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

    // 10 x 10 cases...
}

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

【讨论】:

  • 感谢您的回答,它确实有效,但我需要做很多 if 语句才能满足所有可能的组合。
  • @user3407452 当然,if 语句或switch 可能不是这里合适的解决方案。你应该描述(用文字,最好是一个新问题!)组合的结果应该是什么。然后可以就如何解决这个问题提出适当的建议。 (它很可能涉及一些Map 和/或Set,并且可能在最好的情况下很容易 - 除非每个组合会产生不同的值。 ..)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 2019-09-11
    • 2014-09-15
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多