Java中的JTable着色特定网格线

Java中的JTable着色特定网格线,java,swing,jtable,renderer,Java,Swing,Jtable,Renderer,我有这个8x8表格,我想把表格顶部第一个和第二个单元格的网格涂成红色。我的问题是可以这样做吗?编辑:我删除了这个,因为我认为这不是OP想要的。应OP的要求,我将取消删除它 我有这个8x8表,我想给第一个表的网格上色 桌子最上面的第二个单元格是红色的。我的问题 有可能这样做吗 当然可以 一种方法是扩展现有的渲染器并重写getTableCellRenderComponent方法 例如: public class GridlineCellRenderer extends DefaultTableCel

我有这个8x8表格,我想把表格顶部第一个和第二个单元格的网格涂成红色。我的问题是可以这样做吗?

编辑:我删除了这个,因为我认为这不是OP想要的。应OP的要求,我将取消删除它

我有这个8x8表,我想给第一个表的网格上色 桌子最上面的第二个单元格是红色的。我的问题 有可能这样做吗

当然可以

一种方法是扩展现有的渲染器并重写getTableCellRenderComponent方法

例如:

public class GridlineCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent (
        JTable table,
        Object value,
        boolean isSelected,
        boolean hasFocus,
        int row,
        int column
    ) {
        final Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if ( row == 0 && (column == 0 || column ==1 ) {
            cell.setBackground( Color.RED );
        }
        return cell;
    }
}
然后,您需要警告JTable您希望对某些类型的数据使用此渲染器

例如,如果要对包含整数的单元格使用此选项,则应使用以下选项:

JTable myJTable = ...
myJTable.setDefaultRenderer(Integer.class, new GridlineCellRenderer() );
编辑:我删除了这个,因为我认为这不是OP想要的。应OP的要求,我将取消删除它

我有这个8x8表,我想给第一个表的网格上色 桌子最上面的第二个单元格是红色的。我的问题 有可能这样做吗

当然可以

一种方法是扩展现有的渲染器并重写getTableCellRenderComponent方法

例如:

public class GridlineCellRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent (
        JTable table,
        Object value,
        boolean isSelected,
        boolean hasFocus,
        int row,
        int column
    ) {
        final Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if ( row == 0 && (column == 0 || column ==1 ) {
            cell.setBackground( Color.RED );
        }
        return cell;
    }
}
然后,您需要警告JTable您希望对某些类型的数据使用此渲染器

例如,如果要对包含整数的单元格使用此选项,则应使用以下选项:

JTable myJTable = ...
myJTable.setDefaultRenderer(Integer.class, new GridlineCellRenderer() );

因为您只希望基于位置而不是类型影响某些单元格,所以可以覆盖并返回所需单元格具有红色边框的组件。另请参见。

,因为您只希望基于位置而不是类型影响某些单元格,请覆盖并返回所需单元格的具有红色边框的组件。另请参见。

的可能重复(无论您是否对行、列或单个单元格感兴趣,方法相同)的可能重复(无论您是否对行、列或单个单元格感兴趣,方法相同)很抱歉,我的意思是不着色背景,而是着色那两个单元格的网格线?因为我看到的命令只是着色整个网格,而不是着色特定单元格的网格线cells@user1110191当前位置不完全清楚你想要什么。你在欺骗中坚持要我取消删除这个,所以我们走吧。。。我仍然不明白你是想为几个单元格画背景色(我的答案告诉你怎么做),还是想做别的。希望有帮助。谢谢你,这真的是一个很大的帮助^^嗯,对不起,我的意思是不着色背景,而是着色这两个单元格的网格线?因为我看到的命令只是着色整个网格,而不是着色特定单元格的网格线cells@user1110191当前位置不完全清楚你想要什么。你在欺骗中坚持要我取消删除这个,所以我们走吧。。。我仍然不明白你是想为几个单元格画背景色(我的答案告诉你怎么做),还是想做别的。希望能有帮助。谢谢你,这对边界真的是一个很大的帮助^^+1-这是最接近的一个可以给一些网格线着色的方法(如果这是任务的话),尽管它看起来不太好:真实的网格也显示出来,给出了一个双精度-gridline@kleopatra:说得好;网格和背景色取决于L&F。Aqua默认为白色,而Metal在白色上使用石板蓝。+1作为边框-这是最接近的一个可以为一些网格线着色的颜色(如果这是任务的话),尽管它看起来不好看:真实的网格也显示出来,给出了双色-gridline@kleopatra:说得好;网格和背景色取决于L&F。Aqua默认为白色,而Metal在白色上使用石板蓝。