【问题标题】:Both row and column selection on JTableJTable 上的行和列选择
【发布时间】:2017-10-08 01:32:32
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 1) 你想展示什么实际的效果? 2)你能显示相关的代码吗?最好是minimal reproducible example,一个小程序(不是你的整个程序),它可以编译、运行并向我们展示你的问题。
  • When I click on a JTable cell I'd like to select its whole row and its whole column. - 像“+”号?不支持。你可以做任何一个行或列,但是当你做这两个时,你会得到交叉点。
  • 完全像一个“+”号...“这是因为允许行选择和列选择与启用单元格选择完全相同。”所以我认为这是不可能的。

标签: java swing jtable cell selection


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    正如@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;
        }
    });
    

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

    【讨论】:

    • 谢谢!这正是我想要的。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多