Java - Dibujar en canvas

 
Vista:
sin imagen de perfil
Val: 63
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Dibujar en canvas

Publicado por Camilo (20 intervenciones) el 05/10/2019 20:46:47
Buenas.

Estoy tratando de dibujar en Canvas por medio de la siguiente forma:

1
2
3
4
5
public void dibujar(){
    lapiz= canvas2.getGraphics();
    lapiz.setColor(Color.black);
    lapiz.drawRect(100, 100, 50, 50);
}


Donde "lapiz" es de tipo Graphics, y canvas2 es de tipo Canvas. Aquí es donde creo el canvas:

1
2
3
canvas2 = new Canvas();
    canvas2.setBounds(10, 10, (int)x, (int)y);
    contentPane.add(canvas2);

Aquí es donde muestro la ventana, lo que hago en el main, es crear un objeto que invoque el método iniciar():

1
2
3
4
public void iniciar() {
    dibujar();
    frame.setVisible(true);
}

El problema es que me bota un NullPointerException en la línea donde le mando el color a "lápiz" y no entiendo por qué, se supone que ya inicialice el objeto, no sé si es por que no está tomando el contorno gráfico del canvas2 (así tengo entendido que funciona) o que. Tengo entendido que lo mejor es crear una clase que hereda de Canvas (y así ya lo he utilizado y me ha servido), sin embargo estoy realizando unas pruebas, y quería saber si así se puede dibujar.

De antemano Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 63
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Dibujar en canvas

Publicado por Camilo (20 intervenciones) el 07/10/2019 19:52:25
Es decir, primero muestro la pantalla y luego le envio el getGraphics (por lo que entendí). Lo probé y funciona, el problema es que me toca estar haciendo el dibujo constantenmente, es decir, estar dibujando continuamente (lo hice por medio de un ciclo while) y no se si esto sea correcto (el estar dibujando lo mismo continuamente). Aquí las modificaciones:

1
2
3
4
5
6
7
public void iniciar() {
    frame.setVisible(true);
    iniciado= true;
    while(iniciado){
        dibujar();
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar