2011-11-18 10 views
6

Con frecuencia cuando llamo a getGraphics() devuelve nulo, incluso si configuro xxx.getGraphics(); xxx para ser visible (como muestra una búsqueda en Google ...)Cualquier alternativa a llamar a getGraphics() que devuelve nulo

Pero esto no funciona, y esto me frustra porque es fácil y simple de hacer en C-Sharp.

¿Alguien sabe de una mejor manera de hacer esto en lugar de usar getGraphics() ??

+3

¿Puede proporcionarnos un contexto? Quizás incluya un [sscce] (http://www.sscce.org) demostrando su problema. – mre

+1

Si está intentando personalizar la forma en que se dibuja un componente, anule 'paintComponent' y coloque su código de dibujo allí. – lhballoti

Respuesta

11

Por lo general, no desea utilizar getGraphics en un componente Java Swing ya que será nulo si el componente no se ha procesado aún, e incluso si el componente se ha procesado y el objeto Graphics devuelto no es nulo, generalmente será un objeto efímero y no funcionará correctamente si el componente se vuelve a pintar (un proceso que está fuera de su control).

Una mejor alternativa es dibujar en el método paintComponent de JComponent y usar el objeto Graphics pasado en este método como su parámetro. Si necesita dibujar algo que sea una imagen de fondo, también mire en el dibujo de una Imagen Buffered. Cuando lo haga, aquí llame al getGraphics() en la imagen (o createGraphics() si necesita un objeto Graphics2D), y aquí el objeto devuelto será estable. De todos modos, deberá visualizar esta imagen, ya sea como un ImageIcon mostrado por un JLabel o como una Imagen mostrada en el método paintComponent de JComponent, llamando al Graphics#drawImage(....) en el parámetro Graphics de paintComponent.

12

No utilice getGraphics(). Cualquier pintura que haga será temporal y se perderá la próxima vez que Swing determine que un componente necesita ser repintado.

En lugar de anular el método paintComponent() de un JComponent o JPanel para hacer su pintura personalizada. Ver Custom Painting para más detalles y ejemplos.

Cuestiones relacionadas