加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在JTable单元格中使用JLists?

发布时间:2020-12-15 08:38:21 所属栏目:Java 来源:网络整理
导读:我想要一个简单的方法将JList放在JTable的列中.我已经有了JLists和表,但是当放入表中时,Jlists显示为Strings,这是正常的,因为我使用DefaultTableModel.我已经将getColumnClass()重写为: public Class? extends Object getColumnClass(int c){ return getVal
我想要一个简单的方法将JList放在JTable的列中.我已经有了JLists和表,但是当放入表中时,Jlists显示为Strings,这是正常的,因为我使用DefaultTableModel.我已经将getColumnClass()重写为:

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

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

我想也应该覆盖setValueAt()和getValueAt(),以便在调用JList.getSelectedValues()时返回字符串数组,但我无法弄清楚如何.
我还希望单元格可以编辑,因此用户可以从JList中选择一个或多个选项.编辑一行后,我使用Save按钮将更改保存在数据库中,所以我认为我不需要ListSelectionListener,JList.getSelectedValues()可以正常工作.

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

解决方法

我做到了对于每个需要同样事情的人来说,这就是我所做的:

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,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();
            }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读