java - 如何在 JPanel 上用 Java 绘制 "Class"

标签 java swing

目前我使用的是一个 JFrame,里面有一个 JPanel。在我的 JPanel 中,我重写了 paint 组件方法,但是,我想“绘制”一个“Hero”类作为一个单元。让我详细说明。目前的英雄类有两部分:健康栏和图像。最初,在我的 JPanel 的绘制组件方法中,我是单独绘制角色和健康栏。

public void paintComponent(Graphics g){
        g.drawImage(h.getImage(), h.getX(), h.getY(),null);
        g.setColor(Color.red);
        g.fillRect(h.getX()+7, h.getY()-16, 50, 10);
        g.drawLine(h.getX() + (h.getImage().getWidth(getFocusOwner())/2), h.getY()-40, h.getX() + (h.getImage().getWidth(getFocusOwner())/2), h.getY()+40);


    }

这正确地将健康栏和角色对齐在一起,但是,这似乎效率低下且困惑。那么,无论如何我可以将两者作为一个整体画在一起吗?我考虑过让它们成为一个单独的 JPanel,但意识到这是一个愚蠢的想法。有没有办法更有效地做到这一点?我现在正在寻找解决方案的最大原因之一是我希望能够将角色类扩展到其他类 IE:Monster、Knight、Goblin,但是当我绘制它们时,它们各自的健康栏和图像排成一行。如果您需要任何进一步的解释,请询问。谢谢!

此外,为了激发您可能有的任何想法,我正在想象这样的事情。另一件事:使用 Canvas 会有任何用处吗?

paint(Hero);

再次感谢!

最佳答案

在你的 Hero 类中定义一个接受 Graphics 对象的绘图方法:

public void drawHero(Graphics g)
{
    // implementation
}

然后在您的主 JPanel 子类中使用此绘制方法绘制 Hero:

public void paintComponent(Graphics g)
{
    // other drawing code

    hero.drawHero(g);
}

关于java - 如何在 JPanel 上用 Java 绘制 "Class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30337693/

相关文章:

java - Google App Engine 中的单例可能会过期,或者任何静态变量都会过期吗? ( java )

java - Arrays.sort() 与使用 map 排序

java - JEdi​​torPane 中的 JButton

java - 将控制台数据写入文件并在新框架上显示相同的文件

java - JLabel 的新产品线?

java - 如何通过actionSet扩展点向Workbenchwindow贡献菜单?

java - JPA orm.xml 支持数据库索引

java - BorderLayout Swing

java - 如何将图像获取到数据库,并将其设置为表中特定行的 "tooltipText()"

java - 用于查找字符串中 1 到 3 个字符的正则表达式