我正在尝试根据介于 0 和 1 之间的对象的成员字段部分填充 JTextArea。如果我在 paintComponent 函数中硬编码百分比,它会很好用。但是当我尝试使用成员字段作为百分比值时,它在调试器中始终为 0.0,并且文本后面没有绘制矩形。
为什么成员字段似乎未初始化paintComponent()
?调用后setPercent()
,percentFilled
是正确的。BarGraphText
(在调用对象后,我确实使对象的容器无效setPercent()
。)
编辑: setPercent()
在按钮触发 ActionListener 后调用。单独的 gui 线程是否与此失败有关?当下面的类本身在 JFrame 中时,它可以工作。更新:当我在一个单独的项目中使用它时,有一个按钮可以更改百分比并重绘组件没有任何区别。
已解决:我正在清除程序中错误位置的值。我将发布这个问题。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JTextArea;
public class BarGraphText extends JTextArea {
double percentFilled;
Color fillColor;
BarGraphText( String s )
{
super(s);
setOpaque(false);
percentFilled = 0.0;
}
@Override
public void paintComponent( Graphics g )
{
int width, height;
Rectangle bounds = g.getClipBounds();
if( bounds != null )
{
height = bounds.height;
width = bounds.width;
}
else
{
System.err.println("Error [BarGraphText]: Clipping bounds unknown.");
height = width = 0;
}
g.setColor(fillColor);
g.fillRect(0, 0, (int) (width*percentFilled), height);
super.paintComponent(g);
}
public void setPercent( int myResp, int totResp )
{
percentFilled = (float)myResp / totResp;
}
public void setColor( Color c )
{
fillColor = c;
}
}