2

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

1 回答 1

0

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

于 2013-08-16T18:53:50.027 回答