1

以下が可能かどうか、またそれを行う方法があるかどうか疑問に思っています。テーブルから「空の」セルの選択を削除、非表示、または無効にしたい:

ここに画像の説明を入力

以下は、テーブル モデルを設定するコードです。このコードの後、テーブルにデータを入力するだけです。

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];
    }
}); 
4

1 に答える 1

2

少しハッキングした後、私はあなたに可能な解決策があると思います.

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);

有効にします。空のセルにはまだフォーカスがあります。しかし、それはあなたの要件には十分かもしれません

于 2012-11-29T18:19:26.800 に答える