Java Can';t从另一个类中的实例化类绘制对象

Java Can';t从另一个类中的实例化类绘制对象,java,swing,colors,Java,Swing,Colors,我不能在课堂上画矩形和圆形。这个表单创建的类在我的主类中实例化,但是我不能在那里绘制,只能在它们自己的类中绘制 我不擅长说话。看看代码 班级游戏: @Override public void paint(Graphics g) { super.paint(g); Graphics2D graficos = (Graphics2D) g; /* switch (corAtualR) { case PRETO: { graficos.setCol

我不能在课堂上画矩形和圆形。这个表单创建的类在我的主类中实例化,但是我不能在那里绘制,只能在它们自己的类中绘制

我不擅长说话。看看代码

班级游戏:

@Override
public void paint(Graphics g) {
    super.paint(g);
    Graphics2D graficos = (Graphics2D) g;


    /* switch (corAtualR) {
    case PRETO: {

        graficos.setColor(Color.black);
        graficos.fillRect((int) mb.x, (int) mb.y, 60, 60);
        break;
    }
    case VERMELHO: {

        graficos.setColor(Color.red);
        graficos.fillRect((int) mb.x, (int) mb.y, 60, 60);
        break;
    }

    case AZUL: {

        graficos.setColor(Color.blue);
        graficos.fillRect((int) mb.x, (int) mb.y, 60, 60);
        break;
    }

    case AMARELO: {

        graficos.setColor(Color.yellow);
        graficos.fillRect((int) mb.x, (int) mb.y, 60, 60);
        break;
    }

    case VERDE: {

        graficos.setColor(Color.green);
        graficos.fillRect((int) mb.x, (int) mb.y, 60, 60);
        break;

    } 

    default: {

        graficos.setColor(Color.black);
        graficos.fillRect(0, 0, 0, 0);
        break;
    }


    }  */


    mb.paint(graficos);
    graficos.dispose();

}

}
注释掉的代码是我无法从实例化的类中绘制的代码

这是我的菜单栏课程:

// Ações do Retângulo
public void acoesRetangulo() {

    // Action Listeners dos botões para pintar o retângulo da respectiva cor.

    pretoR.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            corAtualR = PRETO;

        }
    });

}

}

@Override
public void paint(Graphics g) {

    switch (corAtualR) {
    case PRETO: {

        g.setColor(Color.black);
        g.fillRect((int) x, (int) y, 60, 60);
        break;
    }
    case VERMELHO: {

        g.setColor(Color.red);
        g.fillRect((int) x, (int) y, 60, 60);
        break;
    }

    case AZUL: {

        g.setColor(Color.blue);
        g.fillRect((int) x, (int) y, 60, 60);
        break;
    }

    case AMARELO: {

        g.setColor(Color.yellow);
        g.fillRect((int) x, (int) y, 60, 60);
        break;
    }

    case VERDE: {

        g.setColor(Color.green);
        g.fillRect((int) x, (int) y, 60, 60);
        break;

    }

    default: {

        g.setColor(Color.black);
        g.fillRect(0, 0, 0, 0);
        break;
    }
    }


    g.dispose();
}

}
请注意,没有实例(mb,菜单栏)的相同代码在我的程序中正常工作


只是在等待答案,抱歉我的新手在那,呵呵。(还有我的英语)

您似乎误用了继承:菜单栏绝对不应该扩展游戏类。通过这样做,您可以更改游戏变量的状态,但它们不是实际显示的游戏对象的状态,并且您最终只是愚弄自己,以为您的代码可以工作。相反,MenuBar类应该包含游戏变量,该变量应该引用实际可见的游戏对象

旁白:

  • 您应该使用JPanel的
    paintComponent(Graphics g)
    方法进行所有绘制,而不是
    paint(Graphics g)
    方法
  • 千万不要对JVM提供给您的图形对象调用
    dipose()
    ,否则可能会出现绘制问题

请删除代码中不感兴趣的部分。您删除了太多代码,现在人们看不到您滥用了继承。这是一门艺术,试图找出要显示的代码和要删除的代码,但你最好创建并发布一个全新的小程序,向我们展示你的问题,a。是的,这就是我所想的。对不起,谢谢你的其他回答嗯,我做到了,我把画图改成了画图组件,并且在MenuBar上放弃了游戏扩展,把它放到了不起作用的地方。@Memphys:
“它不起作用”
并没有给我们太多可以继续的东西,我们可以用它来找出它不起作用的原因。我建议你把事情大大简化,创建一个,一个有两个类,一个有绘图,另一个有菜单代码,然后发布。让我们体验一下您的问题,从而更好地为您提供解决方案。