繁体   English   中英

JTable上的行和列选择

[英]Both row and column selection on JTable

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

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

我怎样才能做到这一点?

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

请查看“ 表行渲染” ,以获取在行级别执行此操作的示例。

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

正如@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()方法。 希望这可以帮助 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM