【问题标题】:assign keys for combo box in java在java中为组合框分配键
【发布时间】:2012-10-13 17:34:12
【问题描述】:

我想在 Swing 中添加一个 JComboBox,这很简单,但我想为组合中的每个项目分配值。我有以下代码

    JComboBox jc1= new JComboBox();
    jc1.addItem("a");
    jc1.addItem("b");
    jc1.addItem("c");

现在我想要的是,当单击组合框时,它应该相应地返回 1、2 和 3 而不是a,b,c。 有没有办法为组合框中的每个项目分配键值?

【问题讨论】:

  • a, b & c 可以用JComboBox.getSelectedIndex()+1表示为1, 2 & 3。

标签: java swing awt jcombobox


【解决方案1】:

您可以将项目添加为对象,而不是像这样添加字符串:

JComboBox<ItemClass> jc = new JComboBox<ItemClass>();
    jc.addItem(item1);
    jc.addItem(item2);
    jc.addItem(item3);

所以返回键,事件的作用是:jc.getSelectedItem().getKey 这样做你必须重写 ItemClass 类的toString() 函数来返回你想在组合框中显示的字符串。

顺便说一句,对于返回号,您可以尝试:jc.getSelectedIndex(),它会返回您的字符串索引(0 1 2 for "a" "b" "c"

【讨论】:

  • JComboBox 不是通用类。所以你不能直接使用上面的代码。相反,您需要定义一个自定义 ComboBoxModel 并将其设置在 JComboBox 对象中。
  • 但是我必须如何以及在何处分配密钥
  • getKey() 是 ItemClass 的公共成员,构造函数看起来像 ItemClass( int key, String text ),属性存储参数和 getKey() { return key; }
  • -1 for 必须重写类 ItemClass 的 toString() 函数 这是错误的:请参阅@MadProgrammer 的评论以了解正确的方法
【解决方案2】:

您可以创建自己的模型并将其添加到组合框中,而不是直接添加字符串。

检查 Java ComboBoxModel

您可以在this thread找到更多信息

【讨论】:

    【解决方案3】:

    将您的数据包装在一个简单的类中:

    class MyData {
      int value;
      String text;
      ...
    }
    

    现在您可以通过扩展 BasicComboBoxRenderer 来编写自己的渲染器。将“值”转换为“MyData”并呈现文本。

    public class Bla extends BasicComboBoxRenderer{
    
    @Override
    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {
        if(value instanceof MyData) {
            setText(((MyData) value).getText());
        }
        return super.getListCellRendererComponent(list, value, index, isSelected,
                cellHasFocus);
    }
    }
    

    如果您使用 Java7,最好使用像 @Taiki 所示的泛型。现在你可以通过 jc.getSelectedItem() 来获取选中的对象。它始终来自 MyData 类型,您可以访问文本(“a”、“b”等)和值(1、2、3 等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多