Java 如何停止最小化、滚动窗格、调整所有jtable的颜色

Java 如何停止最小化、滚动窗格、调整所有jtable的颜色,java,swing,jtable,background-color,tablecellrenderer,Java,Swing,Jtable,Background Color,Tablecellrenderer,正如你在我的照片中看到的: 在最小化之前: 最小化后 我的渲染器使用最后一种颜色并绘制我的所有表格 下面是我的自定义渲染器类: public class MyCellRenderer extends DefaultTableCellRenderer { public static double fstValue; public static double sndValue; public MyCellRenderer() { } public MyCellRenderer(double

正如你在我的照片中看到的:

在最小化之前:

最小化后

我的渲染器使用最后一种颜色并绘制我的所有表格

下面是我的自定义渲染器类:

public class MyCellRenderer extends DefaultTableCellRenderer {
public static double fstValue;
public static double sndValue;

public MyCellRenderer() { }
 
public MyCellRenderer(double fstValue, double sndValue) {
     this.fstValue = fstValue;
     this.sndValue = sndValue;
      //System.out.println(this.fstValue+" 2ndvalue"+this.sndValue+" ston constructor");
}
  @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

    if(!isSelected) {
            if(compare(this.fstValue,this.sndValue)== 1){
                c.setBackground(Color.GREEN);
               
            }else if (compare(this.fstValue,this.sndValue)== -1) {
                c.setBackground(Color.red);
              

            }else{
                c.setBackground(null);
            }
    }

            
        return c;
}
   
}
我正在快速更新表格,我对此没有问题

但当我调整大小、最小化或向下滚动时,颜色会改变

当我最小化和调整大小时,我的表格会全部更改颜色,但当我向下滚动时,只会更改我滚动的表格的颜色

我怀疑这与我的渲染器调用的repaint或paint方法有关,并且修复起来有问题

我使用线程,每个线程调用下面的代码进行更新:

if( home.text().equals(hometmp.toString())==false)
{
    MyCellRenderer cellRenderer = new MyCellRenderer(valuehm,valuehmt);                    
    table1.setValueAt(home.text(),i-1,1);
}
  • 您有两个调用
    super.getTableCellRenderComponent(…)
    。摆脱第二个。此外,不需要对标签进行第一次调用。该方法返回具有setBackground()方法的组件

  • 方法上不需要
    synchronized
    关键字


  • MyCellRenderer-cellRenderer=新的MyCellRenderer(valuehm,valuehmt)创建后,你在使用
    cellRenderer
    做什么?没有什么我只是想把值传递给类,这样我就可以比较它们以获得特定的颜色我使用线程,我正在尝试同步,但正如你说的,那里不需要它,super是个错误,我现在就编辑它。问题不在这里,问题在于你没有发布的代码。张贴一个适当的说明问题的帖子。因此,您只需要一个带有JTable的帧。JTable将包含几行整数数据。然后,自定义渲染器可以根据需要高亮显示整数。整个
    SSCCE
    大约有30行代码。您可能会在创建
    SSCCE
    时发现问题。我认为问题在于静态值,有人昨天发布了它,但我找不到他的答案,可能是他删除了它,因为他想放一些代码。我会等几天他的Answer,然后我会发布一个合适的SSCCEWell静态从来都不是一个好主意,不应该这样做,所以您需要做的就是修复代码并测试它。你不需要等待任何人为这么简单的东西发布代码<代码>我将等待几天他的回答,然后我将发布一份适当的SSCCE
    -不,当您声明某个问题不起作用时,应在每个问题上发布一份SSCCE。你不用等几天。我不能让我的代码变得如此简单,我发布了我认为是问题的东西,因为我已经测试了所有其他东西。现在我试图在没有静态的情况下将我想要的值传递给我的渲染器,所以我现在试图解决这个问题。如果你知道怎么做,我会很感激的。