从没有扩展JFrame的类调用paint方法

时间:2014-10-20 21:48:46

标签: java swing graphics jframe paint

我有一个类Game,它扩展了JFrame并创建了我想要绘制的窗口。然后我有这个课Die描绘了我想要的东西。从Game我可以在setup()类中调用Die方法,但是如何调用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){

          ......

2 个答案:

答案 0 :(得分:2)

您可能会在JPanel的protected void paintComponent(Graphics g)方法覆盖中执行图形处理,并在该方法内部,在您需要绘制的任何Die对象上调用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的绘画方法中做图形,你也不应该使用Frame或AWT组件。在开始之前,请阅读Swing Graphics教程。关于为什么你不能从设置中调用绘图 - Swing图形是被动的,不能在命令上调用。你应该按我的建议去做,并向绘画管理员建议通过在JPanel上调用repaint()来完成绘画。但是,在您尚未阅读的教程中对此进行了解释。首先,解决这个问题 - 阅读教程。

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

答案 1 :(得分: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){

        ......
    }