JTable上的行和列选择

时间:2017-05-09 16:11:04

标签: java swing jtable cell selection

当我点击JTable单元格时,我想选择整行和整列。

我尝试setRowSelectionAllowed(true)和setColumnSelectionAllowed(true),然后指定了selectionInterval,但它只选择了单个单元格!

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以提供自己的单元格自定义突出显示。

查看Table Row Rendering,了解如何在行级别完成此操作。

您可以看到此方法是否也适用于列级别。主要问题是随着列选择的改变,整个前一列也需要重新绘制。不确定JTable当前如何处理这个问题。

答案 1 :(得分:0)

正如@camickr指出的那样,您可能需要使用表格渲染来执行此操作。这可能不是最好的答案,但这是我能想到的:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if (column == table.getSelectedColumn()) {
            c.setBackground(new Color (57, 105, 138));
            c.setForeground(Color.white);
        } else if (row == table.getSelectedRow()) {
            c.setBackground(new Color (57, 105, 138));
            c.setForeground(Color.white);
        } else {
            if (row % 2 == 0) {
                c.setBackground(Color.white);
                c.setForeground(Color.black);
            } else {
                c.setBackground(new Color(242, 242, 242));
                c.setForeground(Color.black);
            }
        }

        return c;
    }
});

新的Color(57,105,138)是我默认的JTable选择颜色(我不知道它是否与不同的jdk版本不同)。 else语句中的颜色是我的默认JTable而不是选定的颜色。另外,在侦听器中添加repaint()方法。希望这会有所帮助:)