【问题标题】:Access JTable cell component访问 JTable 单元格组件
【发布时间】:2016-04-21 19:02:34
【问题描述】:

好的,我有一个 JTable,我在每个单元格上显示一个 JList。为此,我必须实现 TableCellRenderer 并扩展 DefaultCellEditor。这是我返回要在 GUI 中呈现的实际 JList 的地方。

我想要做的是当用户从 JList 中取消选择一个项目时,我还想从单击的列开始取消选择该表行的所有 JLists 的所有项目。

我的问题是我想不出一种方法来取消选择当前单击的表格列之后的所有项目。我只能访问这个 DefaultListModel。我想我需要访问实际的 JList 才能删除所有选定的项目。

以下是我正在使用的方法。任何想法如何做到这一点?谢谢。

public void deselectFromLocation(int row_, int column_){
        DefaultTableModel dtm = (DefaultTableModel) table1.getModel();

        int cols = dtm.getColumnCount();
        for(int i=column_; i<cols;i++){
            PCSListModel lm = (PCSListModel) dtm.getValueAt(row_, i);
            //How can I access the actual JList object in order to  remove all selected items? 
            //The PCSListMode is DefaultListModel and has no access to JList object. Thanks.


        }

    }

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    大概,您的渲染器和编辑器从您的TableModel 获取现有选择状态,可能会更新ListSelectionModel 的实例,该实例用作准备组件以供使用的一部分。您可以在stopCellEditing() 的实现中更新其他 模型值。您的TableModel 必须为其他单元格触发一个合适的TableModelEvent;对正在编辑的值执行 not。相关示例见here

    【讨论】:

    • 从我发布的方法中取消选择其他列表模型时,我触发了错误的事件。你是对的,它从 stopCellEditing() 开始工作。我刚刚在上面的方法中添加了这一行,它工作 dtm.fireTableCellUpdated(row_,i);感谢您引导我走向正确的方向。
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2012-10-03
    • 2016-07-11
    相关资源
    最近更新 更多