JComboBoxes - 使用setModel访问对象(在Swing中)

Dra*_*neh 2 java user-interface swing jcombobox

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

Objects[] things = new Objects[2];
things[0] = new Objects("The first thing");
things[1] = new Objects("The second thing");
Run Code Online (Sandbox Code Playgroud)

内容和名称是故意愚蠢的,因为这是一个测试,以使这工作(而不是分开一部分书面程序).经过一些研究和阅读后,我发现我"应该"能够使用以下代码将对象加载到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));
Run Code Online (Sandbox Code Playgroud)

这没有用,尽管我最努力去谷歌这似乎太具体了,无法确定一个体面的答案.最终的结果是我想拥有; 下拉列表中显示"第一件事"和"第二件事",然后显然我可以在真实程序中通过引用屏幕上该对象中保存的任何其他数据来扩展它.

任何建议甚至指针,以帮助我认为这一点将不胜感激.

wil*_*ood 6

首先,DefaultComboBoxModel的构造函数可以采用数组,但是数组中不存在属性名称,因此您无法执行此操作.您必须修改对象或组合框以显示对象的正确属性.

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[]));
Run Code Online (Sandbox Code Playgroud)

你有几个选择:)

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