Gostaria de saber como fazer com que um objeto execute um drawRect no momento em que chamo o construtor
desde já obrigado
Gostaria de saber como fazer com que um objeto execute um drawRect no momento em que chamo o construtor
desde já obrigado
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?
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
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
}