é o seguinte tenho um JPanel que o usuario clica em diverentes posições x e y quando o usuario clicar na sua area ele armazena estas informações em um arrayList e depois ele chama um metodo no paint do JPanel caso ele clique em desenhar para desenhar o poligno com os pontos x y passados… segue o metodo:
private void desenhaPoligno(Graphics g){
Object []oArrX = listCordenadasX.toArray();
Object []orrY = listCordenadasY.toArray();
int size = listCordenadasX.size();
int []arrX = new int[size];
int []arrY = new int[size];
for(int i=1;i<size;i++){
arrX[i] = new Integer(oArrX[i].toString()).intValue();
arrY[i] = new Integer(orrY[i].toString()).intValue();
}
g.drawPolygon(arrX,arrY,size);
}
so que ele não esta funcionando…
o metodo e chamado corretamente e os pontos x y estão vindo certos mas ele não desenha o poligno pq?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class PainelMouse extends JPanel implements MouseMotionListener {
public PainelMouse() {
addMouseMotionListener(this);
}
public void mouseDragged(MouseEvent evt) {
Graphics g = getGraphics();
g.drawLine(evt.getX(), evt.getY(), 1, 1);
g.dispose();
}
public void mouseMoved(MouseEvent evt) {
System.out.println("x:" + evt.getX() + ", y:" + evt.getY());
}
}
class JanelaMouse extends JFrame {
public JanelaMouse() {
setSize(300, 300);
getContentPane().add(new PainelMouse());
}
}
public class DesenhoMouse {
public static void main(String args[]) {
JanelaMouse jm = new JanelaMouse();
jm.show();
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class PainelDesenhaFormas extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue);
g.drawRect(10, 10, 80, 80);
g.drawRoundRect(100, 10, 80, 30, 15, 15);
g.setColor(Color.red);
for (int i = 0; i < 100; i += 3)
g.drawOval(100, 100, i, i);
}
}
class JanelaDesenhaFormas extends JFrame {
public JanelaDesenhaFormas() {
setTitle("Desenha Formas");
setSize(300, 200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{ System.exit(0); }
});
getContentPane().add(new PainelDesenhaFormas());
}
}
public class DesenhaFormas {
public static void main(String args[]) {
JanelaDesenhaFormas jdf = new JanelaDesenhaFormas();
jdf.show();
}
}
Dê uma lida nesse tópico, veja o exemplo, e tente entender o princípio:
http://www.guj.com.br/posts/list/56063.java
Você terá que sobrescrever o método paintComponent de um panel e lá usar o método g.drawPolygon(arrX,arrY,size);
Outra coisa: sempre que postar código, use a tag code, como descrito aqui.
O código do metaleiro tem alguns erros conceituais sobre o uso do objeto graphics do swing:
- Nunca dê dispose no objeto que você obteu com getGraphics();
- Você não deve alterar o estado do objeto graphics recebido no método paintComponent. Isso inclui fazer chamada a qualquer método “setter”, como setColor. Se for manipular faça o seguinte:
[code]public void paintComponent(Graphics g) {
//Criamos uma cópia do objeto graphics.
//Agora podemos alterar o estado da cópia à vontade.
Graphics2D g2d = (Graphics2D) g.create();
//Aqui desenhamos a imagem, usando o objeto g2d.
//Podemos dar dispose na cópia, não em g
g2d.dispose();
}[/code]