Java 从不使用';t扩展JFrame

Java 从不使用';t扩展JFrame,java,swing,graphics,jframe,paint,Java,Swing,Graphics,Jframe,Paint,我有一个类Game,它扩展了JFrame并创建了我想要在其上绘制的窗口。然后我有一个类Die,它描绘了我想要的东西。在Game中,我可以调用Die类中的setup()方法,但是接下来如何调用paint()方法呢 您可能会在JPanel的受保护的void paintComponent(graphics g)方法覆盖中绘制图形,在该方法中,对需要绘制的任何模具对象调用die.paint(g) e、 g 要获得更具体和详细的帮助,请尝试创建并发布一个小程序,我们可以运行和编译它,它将向我们展示您的问题

我有一个类
Game
,它扩展了JFrame并创建了我想要在其上绘制的窗口。然后我有一个类
Die
,它描绘了我想要的东西。在
Game
中,我可以调用
Die
类中的
setup()
方法,但是接下来如何调用paint()方法呢


您可能会在JPanel的
受保护的void paintComponent(graphics g)
方法覆盖中绘制图形,在该方法中,对需要绘制的任何模具对象调用
die.paint(g)

e、 g

要获得更具体和详细的帮助,请尝试创建并发布一个小程序,我们可以运行和编译它,它将向我们展示您的问题。您仍然需要向我们展示很多相关的代码,但不需要向我们展示太多的代码,这正是MCVE能够提供帮助的地方

另外,永远不要在JFrame或Frame的绘制方法中绘制图形,而且无论如何也不应该使用Frame或AWT组件。在继续本教程之前,请阅读Swing图形教程。至于为什么不能从设置中调用paint,Swing图形是被动的,不能在命令中调用。您应该按照我的建议去做,并建议油漆管理员通过调用JPanel上的repaint()来完成油漆。但是,这一点在您尚未阅读的教程中也有解释。因此,首先要解决这个问题——阅读教程


Swing教程可以从以下链接找到:。

如果模具扩展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){

        ......
    }

你刚才不是问这个吗?无论如何,你应该试着创建并发布一个,一个我们可以运行和编译的小程序,这将向我们展示你的问题。您仍然需要向我们展示很多相关的代码,但不需要向我们展示太多的代码,这正是MCVE能够提供帮助的地方。您可能正在使用JPanel的
paintComponent(…)
方法进行图形处理,如果是这样,应该在paintComponent方法中调用您的模具对象的paint方法。但见鬼,我只是胡乱猜测。请出示更多。?我正在JFrame的画作中绘制图形(…)。我在描述中提到过。如果不够清楚,我道歉。但是为什么我不能从setup()调用paint()?@John:不,永远不要在JFrame的paint方法中绘制图形。在继续本教程之前,请阅读Swing图形教程。至于为什么不能从设置中调用paint,Swing图形是被动的,不能在命令中调用。您应该按照我的建议去做,并建议油漆管理员通过调用JPanel上的repaint()来完成油漆。但是,这一点在您尚未阅读的教程中也有解释。因此,首先也是最重要的一点是,解决这个问题--阅读教程“从不扩展JFrame的类调用paint方法”作为旁白,我从来没有看到扩展
JFrame
的好理由。这段代码为什么要这样做?
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);

    }

}
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){

        ......
    }