Hice esto:
Hice lo del rectángulo, pero no se si lo que hice, era lo que te referias.
Lo que pasa es que, se abre la ventana, con el canvas mostrando el fondo blanco. Pero no dibuja nada, si quito lo del bufferedImage, entonces si lo dibuja.
Perdon por ser tan insistente, pero es que realmente quiero aprender a dibujar en el canvas, objetos y que se vean bien. De hecho, quisiera mas adelante agregar imagenes en cada nodo, en vez de que sean solo una linea circular, pero para eso ya masomenos tengo idea de como hacerlo. Lo que pasa es que el refrescamiento, es el que me está molestando en estos momentos.
Y gracias por la ayuda que me has dado.
Aqui dejo el codigo que tengo solo para el panel, si necesitas mas codigo de otras clases nada mas me dices.
Código:
Grafo grafo;
public PanelNodos(){
grafo=new Grafo();
setBackground(Color.white);
addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e){
crearNodo(e);
}
public void mousePressed(MouseEvent e) {
seleccionarNodo(e);
}
public void mouseReleased(MouseEvent e) {
soltarNodo(e);
}
public void mouseEntered(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}
public void mouseExited(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}
});
addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
moverNodo(e);
}
public void mouseMoved(MouseEvent e) {
// throw new UnsupportedOperationException("Not supported yet.");
}
});
}
public void crearNodo(final MouseEvent e){
grafo.agregarNodo(e.getX(), e.getY(), 20, 20);
repaint();
/* new Runnable() {
public void run() {
grafo.agregarNodo(e.getX(), e.getY(), 20, 20);
}
};*/
}
public void seleccionarNodo(final MouseEvent e){
grafo.seleccionarNodo(e.getX(), e.getY());
/* new Runnable(){
public void run() {
grafo.seleccionarNodo(e.getX(), e.getY());
}
};*/
}
public void soltarNodo(MouseEvent e){
if(e.getButton()==e.BUTTON1)
grafo.soltarNodo();
else
if(e.getButton()==e.BUTTON3){
grafo.agregarSucesor();
repaint();
}
/*
new Runnable(){
public void run() {
grafo.soltarNodo();
}
};*/
}
public void moverNodo(final MouseEvent e){
grafo.moverNodo(e.getX(), e.getY());
repaint();
}
public void dibujarNodos(BufferedImage imagen){
for(Nodo n:grafo.nodos){
imagen.getGraphics().drawOval(n.posX(), n.posY(), n.ancho(), n.alto());
}
}
public void dibujarArcos(BufferedImage imagen){
for(Nodo n:grafo.nodos){
for(Nodo n2:n.sucesores)
imagen.getGraphics().drawLine(n.posX(), n.posY(), n2.posX(), n2.posY());
}
}
public void paint(Graphics g){
BufferedImage imagen = new BufferedImage (this.WIDTH, this.HEIGHT, BufferedImage.TYPE_INT_RGB);
imagen.getGraphics().setColor(Color.red);
imagen.getGraphics().fillRect(0, 0, 800, 600);
// Se dibuja en la imagen
for(Nodo n:grafo.nodos){
imagen.getGraphics().drawOval(n.posX(), n.posY(), n.ancho(), n.alto());
/* for(Nodo n2:n.sucesores)
imagen.getGraphics().drawLine(n.posX(), n.posY(), n2.posX(), n2.posY());
*/}
// Se "pega" la imagen sobre el componente
g.drawImage(imagen, 0, 0, this);
}