我正在尝试根据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;
}
}
答案 0 :(得分:0)
我正在清除程序中错误位置的值。这不在上面发布的代码中。