首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drawString方法不工作

drawString方法不工作
EN

Stack Overflow用户
提问于 2015-04-03 11:57:35
回答 1查看 325关注 0票数 1

我有一个JPanel对象,我用它作为画布来绘制矩形形状,并在主程序中调用updateString(String c, int x, int)方法来绘制String c

我的代码顶部还有一个名为private Graphics page;的局部变量。下面是updateString()方法:

代码语言:javascript
复制
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()方法中绘制了它们。

代码语言:javascript
复制
@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()方法时,它就不会更新并将字符串放在我最初绘制的矩形的中间?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 12:00:14

这是非常错误的:

代码语言:javascript
复制
page = g;

您不希望将Graphics对象保存到字段中,因为这个对象不会持久,这将导致图形失败,或者NPE的错误或更糟。

取而代之的是

  • 直接在paintComponent方法中绘图。这可以通过创建一个List<String>并将您的字符串存储到这个列表中,然后迭代paintComponent中的列表,绘制每一行来完成。
  • 或者在BufferedImage中绘制,然后在paintComponent方法中绘制。
  • 或者将文本放入一些文本组件中,如JLabel或JTextArea。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29431781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档