如何在jSwing组合框中到达对象?

时间:2018-05-15 19:46:04

标签: java swing button combobox

我正在使用基于maven的java桌面应用程序,我正在使用jSwing框架进行界面操作。我需要在组合框中向人们展示任务和他们的名字,但我不确定我做得好。

在这段代码中,我从我的数据库中获取任务作为列表,然后我在组合框中显示它们。

List<TmsTask> task;
    int i;
    try {
        task = Application.getApp().getMainService().getTasksList();
        for (i = 0; i <= task.size(); i++) {
            jComboBoxTask.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{task.get(i).getTaskName(), 
                                                                                       task.get(i + 1).getTaskName(),
                                                                                       task.get(i + 2).getTaskName()}));
        }

    } catch (Exception ex) {
        Logger.getLogger(BindTask.class.getName()).log(Level.SEVERE, null, ex);
    }

它可以在组合框中看到任务名称。

问题是;我想使用该任务将其他信息保存到数据库。但是如你所见,选择的东西(在组合框中)只是任务名称,而不是任务对象。

如何将任务对象放在组合框选项部分?

在这段代码中,我曾尝试从数据库中获取Task对象并在组合框部分显示它们,但组合框部分都显示相同的任务名称。

private void jComboBoxTaskMousePressed(java.awt.event.MouseEvent evt) {                                           
    TmsTask task;

    try {
        task = Application.getApp().getMainService().getTasks();

            jComboBoxTask.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{task.getTaskName(), 
                                                                                       task.getTaskName(),
                                                                                       task.getTaskName()}));


    } catch (Exception ex) {
        Logger.getLogger(BindTask.class.getName()).log(Level.SEVERE, null, ex);
    }

}

感谢您的帮助,最好的问候。

2 个答案:

答案 0 :(得分:0)

addItem(...)

您无法继续创建新模型。这意味着只会显示最后一个任务。

你需要:

  1. 在循环外设置模型
  2. 使用组合框的JTable方法添加每个项目。
  3. 虽然我怀疑你是否应该使用组合框。

    我建议使用toString(),它会显示行和列中的数据会更好。有关详细信息,请阅读How to Use Tables上的Swing教程中的部分。

    编辑:

    您可以将任何对象存储在组合框中。默认渲染器只使用对象的Task方法在组合框中显示值。

    因此,您可以在组合框中添加git rev-parse --abbrev-ref HEAD对象,然后您需要创建一个自定义渲染器来显示&#34;任务名称&#34;在组合框中。有关此主题的更多信息以及渲染器的简单示例,请参阅Combobox With Custom Renderer

答案 1 :(得分:0)

@camickr是对的(在评论中)。使用组合框显示Object中的所有字段没有多大意义。只需覆盖对象中的content_main方法,默认渲染器就会显示它。

以下是使用简单Person对象(名称,年龄)的方法。

ListView