2014-10-20 55 views
-1

我有一个类Game,它扩展了JFrame并创建了我想要绘制的窗口。然后我有这个类Die,它绘制我想要的。从Game我可以在Die类中调用setup()方法,但是如何调用paint()方法?从不扩展JFrame的类中调用paint方法

public class Die 
{ 
    private int xA, yA;     
    private int dieNumber; 

    public void setup(int someX, int someY, int someValue) { 
     dieNumber = someValue; 
     xA = someX; 
     yA = someY; 
    } 

    public void paint(Graphics pane) { 

     drawBlank(pane);     

     if (dieNumber == 1){   
      drawOne(pane); } 
     else if (dieNumber == 2){ 
      drawTwo(pane); } 
     else if (dieNumber == 3){ 

      ...... 
+3

你刚才不是问这个?无论如何,您应该尝试创建并发布一个我们可以运行和编译的小程序[最小示例程序或MCVE](http://stackoverflow.com/help/mcve),这会向我们展示您的问题。还有很多相关代码需要向我们展示 - 但没有向我们展示太多的代码,这是MCVE的帮助。你可能在JPanel的'paintComponent(...)'方法中做图形,如果是,应该调用你的Die对象的paint方法在paintComponent方法中。但是,我只是在疯狂地猜测。请展示更多。 – 2014-10-20 21:50:09

+0

[Again](http://stackoverflow.com/questions/26472497/java-calling-paint-method-from-different-class)?我[说](http://stackoverflow.com/questions/26474594/java-calling-paint-method-from-window-method-in-another-class)。 – 2014-10-20 21:54:58

+0

@HovercraftFullOfEels我正在做一个JFrame的绘图(...)。我在描述中提到了它。如果不够清楚,我很抱歉。但为什么我不能从setup()调用paint()? – John 2014-10-20 21:55:25

回答

2

你可能会做你的显卡在JPanel的protected void paintComponent(Graphics g)方法覆盖,并且该方法中,呼吁你需要作出任何模具对象die.paint(g)

例如,

class DrawingPanel extends JPanel { 
    private Die die1 = new Die(); 
    private Die die2 = new Die(); 
    //..... 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     die1.paint(g); 
     die2.paint(g); 

    } 

} 

对于更加具体和详细的​​帮助,请尝试创建和发布minimal example program or MCVE,一个小程序,我们可以运行和编译,这将告诉我们您的问题。还有很多相关代码需要向我们展示 - 但没有向我们展示太多的代码,这是MCVE的帮助。

也不要在JFrame或Frame的paint方法中做图形,也不应该使用Frame或AWT组件。在继续阅读之前,请阅读Swing图形教程。至于为什么你不能从设置调用油漆 - 摆动图形是被动的,不能根据命令调用。你应该照我的建议去做,并且建议绘制管理者通过调用JPanel上的repaint()来完成绘画。但是,再次,这在教程中解释,你还没有阅读。所以首先,解决这个问题 - 阅读教程。

摆动教程可以从这个链接找到:Swing Info

2

这是一个更为更好的方法,如果你的芯片扩展JPanel并进行自定义绘制重写的paintComponent:

public class Die extends JPanel 
{ 
    private int xA, yA;     
    private int dieNumber; 

    public void setup(int someX, int someY, int someValue) { 
     dieNumber = someValue; 
     xA = someX; 
     yA = someY; 
    } 

    @Override 
    public void paintComponent(Graphics pane) { 
     super.painComponent(pane);    

     if (dieNumber == 1){   
      drawOne(pane); } 
     else if (dieNumber == 2){ 
      drawTwo(pane); } 
     else if (dieNumber == 3){ 

     ...... 
    }