【问题标题】:How to use JLists in JTable cells?如何在 JTable 单元格中使用 JLists?
【发布时间】:2011-07-01 03:42:11
【问题描述】:

我想要一种将 JList 放入 JTable 列中的简单方法。我已经有了 JLists 和表格,但是当放入表格时,Jlists 显示为字符串,这很正常,因为我使用的是 DefaultTableModel。我已将 getColumnClass() 覆盖为:

public Class<? extends Object> getColumnClass(int c)
{
    return getValueAt(0, c).getClass();
}

但这只是格式化整数和浮点值。

我想 setValueAt()getValueAt() 也应该被覆盖,以便在我调用 JList.getSelectedValues( ),但我不知道怎么做。
我还希望单元格是可编辑的,因此用户可以从 JList 中选择一个或多个选项。编辑一行后,我使用保存按钮将更改保存在数据库中,所以我认为不需要 ListSelectionListener,JList.getSelectedValues() 工作正常。

我知道这是一个常见问题,但我在这里找不到答案。如果这是重复的,请告诉我,我会删除它。

【问题讨论】:

标签: java swing jtable jlist


【解决方案1】:

我已经做到了。对于所有需要同样东西的人,我做了以下工作:

1)我创建了一个 JScrollTableRenderer,并设置了我需要显示 JList 的列以使用此渲染器

    table.getColumnModel().getColumn(5).setCellRenderer(new JScrollTableRenderer());

JScrollTableRenderer 类内容:

public class JScrollTableRenderer extends DefaultTableCellRenderer {

JScrollPane pane = new JScrollPane();

public JScrollTableRenderer()
{
    super();
}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int column)
{
    pane = (JScrollPane) value;
    return pane;
}
}

2)我创建了一个 JScrollTableEditor,并设置了我需要显示 JList 的列以使用此编辑器

    table.getColumnModel().getColumn(5).setCellEditor(new JScrollTableEditor());

JScrollTableEditor 类内容:

    public class JScrollTableEditor extends AbstractCellEditor implements TableCellEditor {
    JScrollPane component = new JScrollPane();
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
          int rowIndex, int vColIndex)
    {
        component = ((JScrollPane) value);
        return ((JScrollPane) value);
    }

    public Object getCellEditorValue()
    {
        return component;
    }

    }

3)我在JTable模型中添加了这个方法:

            public Class<? extends Object> getColumnClass(int c)
            {
                if(c == 5) return JScrollPane.class;
                else return getValueAt(0, c).getClass();
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-14
    • 2012-07-03
    • 2014-03-18
    • 2015-07-31
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多