我怎样才能专注于JTable的整行?

时间:2011-03-31 16:29:45

标签: java swing focus jtable row

我有一个JTable在Java Swing应用程序中显示一些记录。用户只能使用整行,而不能使用单个单元格。有什么方法可以专注于JTable的整行吗?默认设置是仅关注用户单击的单元格。我使用不同的颜色作为焦点,因此如果只聚焦一个单元而不是整行,它看起来不太好。

更新:这是我的自定义TableCellRenderer的当前代码,问题是当一行有焦点并用“焦点”颜色绘制,然后是{{ 1}}失去焦点,只有具有焦点的单元格被重新绘制为“选定”颜色,但所选行中的所有单元格都应使用“选定”颜色重新绘制。

JTable

2 个答案:

答案 0 :(得分:2)

听起来好像在寻找the setRowSelectionAllowed() method

既然你说只是改变颜色就足够了,你可能想看一下Swing Tutorial的custom cell renderer section。您只需设置逻辑以检查给定单元格是否在选定行中,并相应地绘制背景颜色。

答案 1 :(得分:1)

第一个想法就像是

JTable jTable = new JTable() {
    public TableCellRenderer getCellRenderer(int row, int column) {
        final TableCellRenderer superRenderer = super.getCellRenderer(row, column);
        return new TableCellRenderer() {

            @Override
            public Component getTableCellRendererComponent(JTable table, Object object, boolean isSelected, boolean hasFocus, int row, int column) {
                // determine focus on row attribute only
                hasFocus = hasFocus() && isEnabled() && getSelectionModel().getLeadSelectionIndex() == row;
                return superRenderer.getTableCellRendererComponent(table, object, isSelected, hasFocus, row, column);
            }
        };
    }
};

我使用自己的逻辑来确定仅基于行属性的焦点。它使用底层的单元格渲染器,但如果使用焦点边框则看起来很奇怪。