drawString 方法不起作用

drawString method doesn't work

我有一个 JPanel 对象,我将其用作 canvas 来绘制矩形形状,并调用 updateString(String c, int x, int) 方法来绘制 String c 每当我在我的 main 中调用该方法。

我的代码顶部还有一个名为 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()方法时,它只是不更新​​并将字符串放在我最初绘制的矩形的中间?

谢谢。

这是非常非常错误的:

page = g;

您不想将 Graphics 对象保存到字段中,因为该对象不是持久的,这会导致图形故障,或 NPE 或更糟的情况。

而是

  • 直接在 paintComponent 方法中绘制。这可以通过创建一个 List<String> 并将您的字符串存储到此列表,然后遍历 paintComponent 内部的列表,绘制每一行来完成。
  • 或者在BufferedImage中绘制,然后在paintComponent方法中绘制。
  • 或者将您的文本放在一些文本组件中,例如 JLabel 或 JTextArea。