填写JTextArea背景的百分比

时间:2013-06-10 19:09:29

标签: java swing

我正在尝试根据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;
}
}

1 个答案:

答案 0 :(得分:0)

我正在清除程序中错误位置的值。这不在上面发布的代码中。