【问题标题】:JTable remove or hide or disable a particular cell?JTable 删除或隐藏或禁用特定单元格?
【发布时间】:2012-11-17 19:25:25
【问题描述】:

我想知道以下是否可能以及如何做到这一点。我想删除或隐藏或禁用选择 我表中的“空”单元格:

以下是设置表格模型的代码,在这段代码之后我只是用数据填充表格:

myTable.setModel(new javax.swing.table.DefaultTableModel(
        new Object[][]{
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null},
            {null, null, null}
        },
        new String[]{
            null, null, null
        }) {
    Class[] types = new Class[]{
        java.lang.String.class, java.lang.String.class, java.lang.String.class
    };
    boolean[] canEdit = new boolean[]{
        false, false, false
    };

    @Override
    public Class getColumnClass(int columnIndex) {
        return types[columnIndex];
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return canEdit[columnIndex];
    }
}); 

【问题讨论】:

  • 你能解释一下隐藏单元格的含义吗?如果单击空单元格,是否希望选择保持不变?如果单元格为空,是否要更改其默认呈现?
  • 这里已经解决了几次关于选择的问题,通过将选择移动到另一个单元格,对不起,我从来没有使用过,也不记得如何......
  • 这个空单元格,我只是想隐藏它或您认为最好的任何内容,以便用户无法选择它,但可以选择任何非空单元格。

标签: java swing jtable tablecellrenderer tablecelleditor


【解决方案1】:

好吧,经过一番黑客攻击,我想我有一个可能的解决方案。

table.setCellSelectionEnabled(true);
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDefaultRenderer(Object.class, new Renderer());

public class Renderer extends DefaultTableCellRenderer {

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {

    if (table.getValueAt(row, column) == null && isSelected) {
        table.clearSelection();

        return super.getTableCellRendererComponent(table, value, false, false,
                row, column);
    } else {
        return  super.getTableCellRendererComponent(table, value, isSelected,
                hasFocus, row, column);
    }
}

}

这个原因只有在你有的时候才有效

table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

启用。并且空单元格仍然具有焦点。但它可能足以满足您的要求

【讨论】:

  • 我尝试了一些方法,但无法在 ListSelectionListener 中找到正确的列。我也无法从模型中删除默认的 ListSelectionListener,所以我不能保证 deselectListener 会在负责选择它的 Listener 之后触发。
  • 抱歉,这没有意义。 TableModel 没有选择侦听器。替换表选择侦听器将更新任何附加的侦听器。问题是,如何确定哪些单元格可以选择
  • Here's至少一个例子
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2017-05-21
  • 2020-06-17
  • 2015-08-27
相关资源
最近更新 更多