表呈现程序在Java中无法正常工作

表呈现程序在Java中无法正常工作,java,swing,jtable,rendering,tablecellrenderer,Java,Swing,Jtable,Rendering,Tablecellrenderer,我读了很多文章,最终按照我的要求得到了我的JTable渲染,但问题是当用户滚动表格时,JTable的一些其他隐藏部分也被着色,如下图所示 当用户滚动表格时,其他部分也会像这样着色 为什么会发生这种情况?我读了很多文章,它们都显示了完全相同的东西,但这 这是我的密码 JTable table = new JTable() { public boolean isCellEditable(int rowIndex, int colIndex) { return f

我读了很多文章,最终按照我的要求得到了我的JTable渲染,但问题是当用户滚动表格时,JTable的一些其他隐藏部分也被着色,如下图所示

当用户滚动表格时,其他部分也会像这样着色

为什么会发生这种情况?我读了很多文章,它们都显示了完全相同的东西,但这

这是我的密码

JTable table = new JTable()
{
    public boolean isCellEditable(int rowIndex, int colIndex) 
    {
        return false;
    }
};

(DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer())
.setHorizontalAlignment(JLabel.CENTER);
table.setModel(new DefaultTableModel(new Object [][] {}, Columns));
table.setRowHeight(25);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
table.getColumnModel().removeColumn(table.getColumnModel().getColumn(0));
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
        {
            setBackground(new Color(246,137,137));
        }
        return this;
    }
 });

 JScrollPane areaScrollPane = new JScrollPane(table);
 areaScrollPane.setPreferredSize(new Dimension(width, height));
 MyPanel.add(areaScrollPane);
所有文章都展示了这种基于条件呈现自定义行的方法。我的代码出了什么问题?谢谢你的支持

if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
{
    setBackground(new Color(246,137,137));
}
相同的渲染器用于所有单元格,因此一旦设置了背景,它将应用于所有单元格。所以,我认为你需要这样的东西:

if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
{
    setBackground(new Color(246,137,137));
}
else
    setBackground( table.getBackground() );
还应添加代码以确保未选择单元格,以便可以绘制默认选择颜色

除了使用自定义渲染器,还可以覆盖JTable的
prepareRenderer(…)
方法。显示如何基于行中的值渲染该行

相同的渲染器用于所有单元格,因此一旦设置了背景,它将应用于所有单元格。所以,我认为你需要这样的东西:

if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
{
    setBackground(new Color(246,137,137));
}
else
    setBackground( table.getBackground() );
还应添加代码以确保未选择单元格,以便可以绘制默认选择颜色


除了使用自定义渲染器,还可以覆盖JTable的
prepareRenderer(…)
方法。显示如何基于行中的值渲染该行。

您正在设置该行的背景,而不是应该返回的组件。组件c=超级。。。c、 挫折。。。return cyou正在设置此组件的背景,而不是您应该返回的组件。组件c=超级。。。c、 挫折。。。这花了我整整一天的时间,你只建议了一件非常合适的东西。精彩的杰出的非常感谢。成年男子Camickr只有一件事,请告诉我,如果我的编码方式有任何其他错误,你能告诉我吗?意思是说,在记住setDefaultRenderer、getTableHeader()和isCellEditable等要求的情况下,有什么可以让我的代码变得更好的吗etc@JavaDrunkJava变量名不应以大写字符开头。发布代码中的大多数变量都是正确的,但有一个变量“MyPanel”不正确。这让人困惑,没有理由这么做,所以我的一般意见是保持一致。伙计,这花了我整整一天的时间,你只建议了一件非常合适的事情。精彩的杰出的非常感谢。成年男子Camickr只有一件事,请告诉我,如果我的编码方式有任何其他错误,你能告诉我吗?意思是说,在记住setDefaultRenderer、getTableHeader()和isCellEditable等要求的情况下,有什么可以让我的代码变得更好的吗etc@JavaDrunkJava变量名不应以大写字符开头。发布代码中的大多数变量都是正确的,但有一个变量“MyPanel”不正确。这是令人困惑的,没有理由这样做,所以我的一般意见是保持一致。