drawRect

3 respostas
Giovani_Fiori

Gostaria de saber como fazer com que um objeto execute um drawRect no momento em que chamo o construtor

desde já obrigado

3 Respostas

ViniGodoy

Hummmm... possível é, mas cheira muito mal o que você quer fazer.

Por exemplo, você poderia executar o drawRect em um outro contexto gráfico:

public class Retangulo {
   private int x, y, h, w;

   public Retangulo (Graphics g, int x, int y, int w, int h) {
      this.x = x;
      this.y = y;
      this.w = w;
      this.h = h;
           
      Graphics2D g2d = (Graphics2D) g.create();
      g2d.drawRect(x, y, w, h);
      g2d.dispose();
   }
}

Entretanto, geralmente a pintura é executada várias vezes, por isso eu não recomendaria deixar esse código num construtor. Você pode explicar melhor o que é o seu programa, e pq vc acha que o drawRect deveria estar no construtor?

Giovani_Fiori

na real eu precisava faze uma especie de mapa, onde teria alguns quadrados espalhados nele

esses quadrados devem ser objetos e serão guardados em um ArrayList

(ate aqui tudo certo)

e quando instanciar um novo quadrado, gostaria que ele fosse desenhado automaticamente na minha JFrame

o que devo fazer para isto??

vlww

ViniGodoy

Você cria uma classe assim:

public class Retangulo {
   private int x, y, h, w;

   public Retangulo (Graphics g, int x, int y, int w, int h) {
      this.x = x;
      this.y = y;
      this.w = w;
      this.h = h;
   }
   public void desenhar(Graphics g) {
      Graphics2D g2d = (Graphics2D) g.create();
      g2d.drawRect(x, y, w, h);
      g2d.dispose();
   }
}

E, depois, no seu frame, você sobrescreve o método paint (ou, caso o mapa esteja num painel, o paintComponent do painel).

public void paint(Graphics g) {
   g.clearRect(0, 0, getWidth(), getHeigth()); //Apaga o frame
   desenhaMapa(g): //Desenha o mapa
   //Desenha os quadrados
   for (Retangulo quad : quadrados) {
        quad.desenhar(g);
   }
}

Depois, no método de adicionar um quadrado:

public void btnAdicionarQuadradoClick() {
     int lado = Integer.parseInt(JOptionPane.showInputDialog("Qual a medida do lado?"));
     int x = Integer.parseInt(JOptionPane.showInputDialog("Posição x?"));
     int y = Integer.parseInt(JOptionPane.showInputDialog("Posição y?"));
     Retangulo quad = new Retangulo(x, y, lado, lado);
     quadrados.add(quad);
     repaint(); //Vai fazer com que o paint seja chamado, redesenhando todos os quadrados
}
Criado 24 de junho de 2009
Ultima resposta 24 de jun. de 2009
Respostas 3
Participantes 2