JTable 上的行和列选择

Both row and column selection on JTable

当我点击一个 JTable 单元格时,我想 select 它的整行和整列。

我尝试了 setRowSelectionAllowed(true) 和 setColumnSelectionAllowed(true) 然后指定了一个 selectionInterval 但它 select 只有单个单元格!

我该怎么做?

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

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

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

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

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

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