我有一个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()方法中绘制了它们。
@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()方法时,它就不会更新并将字符串放在我最初绘制的矩形的中间?
谢谢。
发布于 2015-04-03 12:00:14
这是非常错误的:
page = g;您不希望将Graphics对象保存到字段中,因为这个对象不会持久,这将导致图形失败,或者NPE的错误或更糟。
取而代之的是
List<String>并将您的字符串存储到这个列表中,然后迭代paintComponent中的列表,绘制每一行来完成。https://stackoverflow.com/questions/29431781
复制相似问题