java多类绘画

时间:2011-04-13 22:56:10

标签: java multithreading graphics paint

我正在一个有图形的项目中工作,到目前为止,我有两个不同的类,每个类都有图形。在这两个类中都调用了paint(Graphics g)方法,但是当我执行它时,JFrames都闪烁了。

我的问题是:正确的方法是在一个类中调用项目的所有图形,还是每个类需要新的线程?

提前谢谢。


代码段

public void paint(Graphics g) 
{ 
    repaint(); 
    mapLimits();
    moveEnemy();
    g.drawImage(background, 0,0, null); // draw background 
    drawImage(g, myHero, heroXposition, heroYposition, "name"); // draw hero 
    repaint(); 
}

对于库存类,paint方法就像这样

public void paint(Graphics g) 
{ 
    g.drawImage(background, 0,0,null); //background 
    repaint(); 
} 

并且在主类

中调用它们
Hero hero = new Hero(); 
hero.setVisible(true); 
Inventory inv = new Inventory(); 
inv.setVisible();

1 个答案:

答案 0 :(得分:2)

答案与Thread无关(或者说,抛出线程不能解决代码已经存在的问题)。这一切都归结为自定义绘画,并正确地做到了。

有关详细信息,请参阅Java教程的Performing Custom Painting课程。

一些一般提示是:

  • 永远不要覆盖顶级容器中的paint(Graphics)。在你做的那一刻,你发现自定义渲染可能会更好地显示在JDialogJInternalFrame(等)中,而不是你编写的任何内容。
  • 而是延伸JComponentJPanel中的一个。第一个用于完全自定义绘画,第二个用于将自定义绘画与其他组件相结合。在其中任何一个类中,覆盖paintComponent(Graphics)而不是paint(Graphics)
  • 使用常用的术语和课程&方法名称。课程EachWordUpperCase,方法&属性firstWordLowerCase,常量ALL_UPPER_CASE。如果除了你以外的任何人都会阅读代码,这一点尤为重要。其他程序员使用名称的大小来提供关于其性质/来源的提示。
  • 请勿在{{1​​}} repaint()内致电paint(Graphics)