Foros del Web » Programación para mayores de 30 ;) » Java »

Graficar bajo demanda con Paint(Graphics g) en Java

Estas en el tema de Graficar bajo demanda con Paint(Graphics g) en Java en el foro de Java en Foros del Web. hola, he tratado de hacer una aplicación que dibuje bajo demanda y no cuando inicie la aplicación... La verdad no he podido salirme del Paint(graphics ...
  #1 (permalink)  
Antiguo 12/05/2010, 16:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 38
Antigüedad: 13 años, 11 meses
Puntos: 0
Graficar bajo demanda con Paint(Graphics g) en Java

hola, he tratado de hacer una aplicación que dibuje bajo demanda y no cuando inicie la aplicación...

La verdad no he podido salirme del Paint(graphics g).
La idea es que tengo cuatro botones:
el primero dibuja un grafico usando Graphics2D,
el segundo botón borra el anterior y pone un nuevo dibujo,
el tercero agrega una imagen sin borrar lo anterior
el cuarto borra solo la imagen dibujada por el segundo botón.

Ya he podido graficar pero no he podido hacer estas operaciones...
No estoy usando applet sino la clase JFrame
Alguna ayuda?

Inicialmente podrian ser dibujos fáciles, tipo líneas, círculos, texto, etc...

gracias...
  #2 (permalink)  
Antiguo 13/05/2010, 05:55
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Hola:

Heredas de la clase sobre la que vas a dibujar (JFrame, JPanel, JComponent o lo que quieras) y sobre-escribes el método paint() para que dibuje.

En esa misma clase, pon como atributos los distintos objetos a dibujar (coordenadas, clase Circulo, String de texto o lo que quieras, con sus métodos set y get correspondientes).

Los distintos botones sólo tiene que llamar, por ejemplo, a setCirculo(null) para borrar el círculo y setLinea(1,2,3,4) para fijar una linea.

El método paint siempre debe hacer lo mismo, ir mirando si cada atributo es null y si no es null, dibujarlo. Si todos están inicialmente a null, no se dibujará nada en el arranque hasta que pulses un botón.

Cada botón, después de cambiar los objetos gráficos a dibujar tiene que llamar a repaint(), para hacer que el gráfico se repinte.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 13/05/2010, 17:06
 
Fecha de Ingreso: mayo-2010
Mensajes: 38
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Hmmm, aun no me queda muy claro... me podrías indicar más en detalle por favor...
Por ejemplo como hacer para que de una vez no arranque dibujando y solo lo haga al presionar un botón...
Creo que sería mejor botón por botón y no hacer todo de tajo...
De todas maneras gracias por tu colaboración...
saludos
  #4 (permalink)  
Antiguo 13/05/2010, 22:47
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Hola:

Para que no dibuje nada al arrancar

Código:
public class Lienzo extends JComponent {
    private Circulo circulo=null;
    private Cuadrado cuadrado = null;
    public void paint (Graphics g) {
          if (null != circulo) {
              g.pintaCirculo();
          }
          if (null != cuadrado) {
               g.pintaCuadrado();
          }
    }
}
Y ahora, para que dibuje cuando pulsas un botón

Código:
public void actionPerfored (ActionEvent e) {
     lienzo.setCirculo (new Circulo());
     lienzo.repaint();
}
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 15/05/2010, 20:48
 
Fecha de Ingreso: mayo-2010
Mensajes: 38
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Imagino que Circulo es una clase que dijuja un Circulo, parece obvio..pero puede no serlo...
Entonces siendo una clase debe tener un constructor con algunos parámetros con un radio y una posición de tipo X, Y. Es algo sencillo esta parte.

Sin embargo, el problema sería borrar un elemento Básico, sin importar el tipo... o dibujar otro después en cualquier momento dado excepto al inicio cuando se llame al método paint(Graphics g).

Yo pensaba en algo como
Código Java:
Ver original
  1. private void dibujarCirculoActionPerformed(java.awt.event.ActionEvent evt) {  
  2.     dibujarCirculo();
  3.     repaint();
  4. }
  5.  
  6. private void dibujarCuadradoActionPerformed(java.awt.event.ActionEvent evt) {  
  7.     dibujarCuadrado();
  8.     repaint();
  9. }
  10.  
  11. private void dibujarTrianguloActionPerformed(java.awt.event.ActionEvent evt) {  
  12.     dibujarTriangulo();
  13.     repaint();
  14. }
  15.  
  16. private void borrarCirculoActionPerformed(java.awt.event.ActionEvent evt) {  
  17.     borrarCirculo();
  18.     repaint();
  19. }
  20.  
  21. private void dibujarCuadradoActionPerformed(java.awt.event.ActionEvent evt) {  
  22.     borrarCuadrado();
  23.     repaint();
  24. }
  25.  
  26. private void dibujarTrianguloActionPerformed(java.awt.event.ActionEvent evt) {  
  27.     borrarTriangulo();
  28.     repaint();
  29. }

El asunto que es lo que va dentro de cada uno de esos métodos...

Última edición por chepelucho; 15/05/2010 a las 20:59
  #6 (permalink)  
Antiguo 15/05/2010, 22:56
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Buenas:

Cuando se llama a repaint(), el componente borra todo lo que tiene y vuelve a dibujarlo todo. Para que no se siga dibujando el círculo

Código:
public void actionPerfored (ActionEvent e) {
     lienzo.setCirculo (null);
     lienzo.repaint();
}
y así el repaint() borraría todo y pain() no volvería a dibujar el círculo puesto que es null.

Circulo sería una clase, como dices, con x,y para el centro y radio. Igualmente harías clases para cada uno de los elementos que quieras dibujar, Linea(x1,y1,x2,y2), Cuadrado (x1,y2,lado), etc.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 16/05/2010, 15:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 38
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Creo que es mejor hacer la pregunta tonta y despejar la duda, que hacerse el entendido y quedarse con ella.

Por eso pregunto: Si no estoy en lo cierto me corriges...
¿El método repaint() borra todo y vuelve a pintar?
Cuál es la diferencia entre repaint() y update? Cómo sería aplicable?

volviendo a repaint... veo que no acepta argumento como lo hace paint(Graphics g).

Saludos...

Gracias
  #8 (permalink)  
Antiguo 16/05/2010, 22:06
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

La verdad es que el mecanismo es complejo y son varios lo métodos implicados. El orden teórico es el siguiente:

- Cuando un componente necesita repintarse hay que llamar a repaint(). Esto sólo marca que ese componente necesita repintado y "encola" esa necesidad en el hilo especial que tiene java para tratar eventos y pintar ventanas. Es al método al que debemos llamar cuando queremos que algo se repinte correctamente.

- Cuando en el hilo java de pntado de ventanas le llega el turno a la petición encolada por repaint(), java llama al método update(). Este únicamente llama a paint().

- El método paint() por defecto llama a otros tres métodos en este orden: paintComponent(), paintBorder() y paintChildren(). El método que borra el componente es paintComponent().

Creo que me equivoqué al comentarte que repaint() borra todo, quizás tengas tú que encargarte de borrar todo al principio de paint(). Haz la prueba y si no se te borra todo, entonces, al principio del paint(), pinta un rectángulo relleno de negro que ocupe todo el componente (es lo que hace java para borrar).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 19/05/2010, 15:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 38
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Que lástima... pero no he podido...
Y cómo hago para que después de que al iniciar mi programa dibuje después de que el usuario lo desee...
Hay algún ejemplo que no sea Applet....
Gracias...
  #10 (permalink)  
Antiguo 19/05/2010, 21:35
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Graficar bajo demanda con Paint(Graphics g) en Java

Nada de lo dicho aquí es específico de Applets, te debería valer tal cual en cualquier tipo de ventana java.

No entiendo lo de "al iniciar mi programa dibuje después de que el usuario lo desee". ¿Es la misma pregunta del principio?

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: graphics2d, graficos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:14.