【问题标题】:JComboBoxes - Using setModel to access Objects (in Swing)JComboBoxes - 使用 setModel 访问对象(在 Swing 中)
【发布时间】:2010-10-13 17:58:30
【问题描述】:

快速背景,我正在使用 Netbeans 来开发这个(我没有太多的 Swing 经验,并且在获得开发速度的机会上失去了经验)。 在 Netbeans 中,您可以修改哪些代码以阻止新手用户破坏代码显然是有限制的(我已经有趣地做过一次) 无论如何,我有一类对象,这些对象有一个名称属性。在应用程序中,我直接初始化了这些对象的数组并将它们称为“事物”;

Objects[] things = new Objects[2];
things[0] = new Objects("The first thing");
things[1] = new Objects("The second thing");

内容和名称故意是空洞的,因为这是一个测试来让它工作(而不是拆开一个部分编写的程序)。 经过一些研究和阅读,我发现我“应该”能够使用以下代码将对象加载到 setModel 参数中;

    new javax.swing.DefaultComboBoxModel(things[].name)
//The above is the code to use within setModel, the below is the completed example
    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[].name));

这没有奏效,尽管我尽了最大努力在谷歌上搜索,但这似乎太具体而无法确定一个体面的答案。最终的结果是我想要的; “第一件事”和“第二件事”显示在下拉列表中,然后显然我可以通过引用屏幕上该对象中保存的任何其他数据在实际程序中对此进行扩展。

任何帮助我思考这一点的建议甚至指点都将不胜感激。

【问题讨论】:

标签: java user-interface swing jcombobox


【解决方案1】:

首先,DefaultComboBoxModel 的构造函数可以接受一个数组,但是数组中不存在属性名称,所以你不能这样做。您必须修改对象或组合框以显示对象的正确属性。

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[]));

你有几个选择:)

  1. 快速简便地覆盖 toString 以返回名称(假设 Objects 是您的类)
  2. 创建一个在其 toString() 方法中返回对象名称的包装类 (ObjectsWrapper)
  3. 以某种方式修改 JComboBox,无论是模型还是渲染器,以显示所需的属性

【讨论】:

    【解决方案2】:

    难道不只是在您的对象上实现toString() 以返回其.name 属性与默认组合框模型一起工作吗?

    查看类似问题:Java Swing: Extend DefaultComboBoxModel and override methods

    【讨论】:

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