无法从另一个类中的实例化类中绘制对象

时间:2014-04-17 23:44:20

标签: java swing colors

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

言语不好。看看代码。

课堂游戏:

@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),在我的程序中正常工作。

等待答案,抱歉我的新生儿嘿嘿。 (和我的英文)

1 个答案:

答案 0 :(得分:1)

你似乎误用了继承:MenuBar应该绝对扩展Game类。通过执行此操作,您可以更改Game变量的状态,但它们不是实际显示的Game对象的状态,您最终只是在愚弄自己认为您的代码可能正常工作。相反,MenuBar类应该 包含 一个Game变量,该变量应该引用实际的可见Game对象。

暂且不说:

  • 您应该在JPanel的paintComponent(Graphics g)方法中进行所有绘画,而不是paint(Graphics g)方法。
  • 永远不要在JVM上给你的Graphics对象上调用dipose(),否则你可能会在下游出现绘画问题。