gpt4 book ai didi

java - getTableCellRendererComponent 被反复调用并使 CPU 使用率达到 100%

转载 作者:行者123 更新时间:2023-11-29 09:44:40 24 4
gpt4 key购买 nike

我有一个 JTable 并且它的列之一应该显示图像;我重写了 DefaultTableCellRenderergetTableCellRendererComponent 方法来执行此操作。但问题是当图像不是 Null 并且单元格正在显示它时,此方法被反复调用(就像在无限循环中调用一样)并使用 100% CPU! (当图像为 Null 时没有问题!)。

问题是什么?

我的扩展类是:

public class imageCellRenderer extends DefaultTableCellRenderer{

@Override
public void validate() {}
@Override
public void revalidate() {}
@Override
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {}
@Override
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(isSelected) {
this.setBackground(table.getSelectionBackground());
this.setForeground(table.getSelectionForeground());
}else {
this.setBackground(table.getBackground());
this.setForeground(table.getForeground());
}
this.setIcon(null);
Image Scaled;
ImageIcon tmp;
System.out.println("CR");
if(value != null){
System.out.println("CRP");
if(value instanceof ImageIcon){
tmp=(ImageIcon)value;
}else{
tmp=new ImageIcon(value.toString());
}
int w=tmp.getIconWidth();
int h=tmp.getIconHeight();
int refW=100;
int refH=100;
double ratio=(double)w/(double)h;
if(w!=refW && h!=refH){
int nh,nw;
double relx=(double)w/(double)refW;
if(((double)h/relx)<refH){
nh = (int) Math.round(refW / ratio);
nw = refW;
}else{
nw=(int)Math.round(refH*ratio);
nh=refH;
}
Scaled=tmp.getImage().getScaledInstance(nw, nh, Image.SCALE_SMOOTH);

tmp=new ImageIcon(Scaled);
}
this.setIcon(tmp);
table.setRowHeight(row, tmp.getIconHeight());

this.setSize(100, tmp.getIconHeight());
this.setHorizontalAlignment(JLabel.CENTER);
}
return this;
}

}

我是这样使用它的:

jTable1.getColumnModel().getColumn(2).setCellRenderer(new imageCellRenderer());

最佳答案

删除

table.setRowHeight(row, tmp.getIconHeight());

来自渲染器的调用。此调用将调整再次触发渲染器的行高

关于java - getTableCellRendererComponent 被反复调用并使 CPU 使用率达到 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12880867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com