我不能在课堂上画我的矩形和圆圈。已创建此表单的类在我的主类中实例化,但我不能在那里绘制,只能在他们自己的类中绘制。
言语不好。看看代码。
课堂游戏:
@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();
}
}
注释掉的代码是我无法从我的实例化类中绘制的代码。
这是我的MenuBar类:
// 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),在我的程序中正常工作。
等待答案,抱歉我的新生儿嘿嘿。 (和我的英文)
答案 0 :(得分:1)
你似乎误用了继承:MenuBar应该绝对不扩展Game类。通过执行此操作,您可以更改Game变量的状态,但它们不是实际显示的Game对象的状态,您最终只是在愚弄自己认为您的代码可能正常工作。相反,MenuBar类应该 包含 一个Game变量,该变量应该引用实际的可见Game对象。
暂且不说:
paintComponent(Graphics g)
方法中进行所有绘画,而不是paint(Graphics g)
方法。dipose()
,否则你可能会在下游出现绘画问题。