JTable启用一些复选框列

时间:2015-09-25 16:41:34

标签: java swing jtable jcheckbox

我有一个Routing Error No route matches [POST] "/blogs/new" 我从数据库填充,但我想启用或灰显一些这些jtable行(存在于同一数据库的另一个表中的行),因为用户无法检查{{这些行中的1}},但其余的行(此表中不存在的行)总是可以检查。

jtable

2 个答案:

答案 0 :(得分:0)

先生,您可以在数组中创建复选框,以便更轻松地访问它们。

JCheckBox [] checkboxes= new JCheckBox[WIDTH];

如果你发现第二个索引是重复的,你可以简单地禁用数组中的第二个复选框

checkboxes[1].setEnabled(false);

答案 1 :(得分:0)

可以使用修改后的TableCellRenderer执行着色。我创建了一个自定义的TableCellRenderer,如下所示。

<强> ColorTableRenderer.java

它可以添加要标记为灰色的行,并清除所有标记的行。

public class ColorTableRenderer extends DefaultTableCellRenderer {

    //contains row indexes which need to color
    private final List<Integer> colorIndexes = new ArrayList<>();

    //add new index to show as color
    public void addColorIndex(Integer index) {
        colorIndexes.add(index);
    }

    //clear all color indexes
    public void clearColorIndexes() {
        colorIndexes.clear();
    }

    private boolean isColorIndex(Integer index) {
        return colorIndexes.contains(index);
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if (isColorIndex(row)) {//check if marked as colored
            component.setBackground(Color.LIGHT_GRAY);//highlight color
        } else {
            component.setBackground(Color.WHITE);//other color
        }

        return component;
    }
}

使用ColorTableRenderer

使用以下方法之一将ColorTableRenderer设置为表格。

    ColorTableRenderer renderer = new ColorTableRenderer();

    //set TableCellRenderer into a specified JTable column class
    table.setDefaultRenderer(String[].class, renderer);

    //or, set TableCellRenderer into a specified JTable column
    table.getColumnModel().getColumn(columnIndex).setCellRenderer(renderer);

考虑到您的代码,您可以添加以下修改以选择行颜色。

    renderer.clearColorIndexes();
    for (int m = 0; m < tb_doublon.getRowCount(); m++) {
        Statement statdouble = null;
        ResultSet rsdouble = null;

        //I get the value of the cell of the column 1 :id, line : i
        String id = (String) tb_doublon.getValueAt(m, 1);
        String cli = (String) tb_doublon.getValueAt(m, 2);

        //i browse the other table to enable or gray out the lines existing in that table with th id
        String doubleexistant = "select * from doublon where id='" + id + "' and cli='" + cli + "'";
        statdouble = conn.createStatement();
        rsdouble = statdouble.executeQuery(doubleexistant);
        while (rsdouble.next()) {
            renderer.addColorIndex(m);
        }
    }

这是我测试的屏幕截图

Color Table Cell Test