我有一个JPanel
对象,我将其用作绘制矩形形状的画布,并且只要我在主要方法中调用该方法,就调用updateString(String c, int x, int)
方法绘制String c
。
我的代码顶部还有一个名为private Graphics page;
的局部变量。这是updateString()
方法:
public void updateString(String c, int ind1, int ind2)
{
for( int i = 0; i < Math.pow(DIMENSION, 2); i++ )
if( grid[i].contains(new Point(ind1, ind2)))
{
page.drawString( c, (int) grid[i].getCenterX(), (int) grid[i].getCenterY());
repaint();
return;
}
}
grid [] 是我的Rectangle
对象'数组,用于存储Rectangle
对象的数据,我实际上是在paintComponent()
方法中绘制的。< / p>
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
page = g;
for( int i = 0; i < Math.pow(DIMENSION, 2); i++ )
{
g.drawRect(grid[i].x, grid[i].y, grid[i].width, grid[i].height);
}
}
我无法理解的一点是,为什么每当我调用updateString()
方法时,它只是不更新并将String放在我最初绘制的矩形的中间?
谢谢。
答案 0 :(得分:4)
这是非常错误的:
page = g;
您不希望将Graphics对象保存到字段中,因为此对象不会持久,这会导致图形故障,或NPE或更糟。
而不是
List<String>
并将您的字符串存储到此列表,然后遍历paintComponent中的List,绘制每一行来完成。