Programación en castellano
Inicio > Tutoriales > APIS Java > Gráficos con Java 2D
-Tutoriales

Gráficos con Java 2D


Problemas Más Comunes en los Gráficos en Java 2D

Problema: Puedo ejecutar applets Java2D con appletviewer, pero no funcionan con mi navegador. La consola Java del navegador dice: defn not found for java/awt/Graphics2D.

Problema: ¿Cómo puedo escribir sobre una imagen anterior? Nuestro problema es que nuestro applet muestra una imagen de un mapa, pero cuando se dibuja una línea sobre el mapa, la línea sobreescribe el mapa.

  • Deberías intentar dibujar tu imagen dentro de un BufferedImage. Luego, dibuja el BufferedImage dentro de un contexto Graphics2D y luego dibuja la línea sobre el contexto Graphics2D un ejemplo de código está en Map_Line.java Sólo debes sustituir el nombre de tu imagen por images/bld.jpg.

Problema: ¿Cómo creo un BufferedImage desde un fichero gif o jpeg?

  • Para crear un BufferedImage desde un gif o jpeg, debes cargar tu fichero gif o jpeg en un objeto Image y luego dibujar el Image en el objeto BufferedImage. El siguiente fragmento de código ilustra esto.
    Image img = getImage("picture.gif");
    int width = img.getWidth(this);
    int height = img.getHeight(this);
    
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D biContext = bi.createGraphics();
    biContext.drawImage(img, 0, 0, null);
    

    getImage es un método Applet. Si tienes una aplicación, puedes usar.

    Image img = Toolkit.getDefaultToolkit().getImage("picture.gif");
    

    BufferedImage.TYPE_INT_RGB es uno de los muchos tipos de BufferedImage. Para más información, puedes ver. http://java.sun.com/products/java-media/2D/forDevelopers/2Dapi/java/awt/image/BufferedImage.html

    Necesitas crear un contexto Graphics2D para el BufferedImage usando el método createGraphics. Luego, puedes usar el método drawImage de la clase Graphics2D para dibujar la imagen dentro del buffer.

Problema: No puedo compilar el código fuente de StrokeAndFill.java y Transform.java con jdk1.2beta4.

  • La implementación de TextLayout.getOutline se cambió entre la beta4 y el JDK actual. La nueva implementación sólo toma un AffineTransform como argumento. Necesitas descargar el nuevo JDK para ejecutar el ejemplo.

Problema: ¿Existe alguna forma de especificar una fórmula para una línea y dibujar un gráfico de acuerdo a ella?

  • Usar los segmentos de línea podría ser la forma más sencilla. Pudes representar los segmentos de línea rellenando un GeneralPath con ellos, o implementando Shape y PathIterator y leyendo los segmentos de línea 'bajo demanda' para guardar el almacenamiento intermedio del objeto GeneralPath. Observa que podrías analizar tu fórmula para determinar si corresponde con curvas cúbicas o cuadráticas.

Problema: ¿Cómo puedo añadir texto a un campo gráfico en una cierta posición?

  • En el JDK 1.2 se añadió una clase llamada Graphics2D (ahora llamado Java 2 SDK). Esta clase desciende de Graphics. Hay dos métodos drawString en Graphics2D que puedes utilizar. Si quieres rotar el texto, deberías usar Graphics2D en vez de Graphics por lo que podrás realizar rotaciones y otras transformaciones en tu contexto Graphics2D.

    El ejemplo Transform en el tutorial de 2D no usa drawString para dibujar texto. Lo que sucede es que se crea un TextLayout desde la cadena "Text." El TextLayout nos permite crear un objeto Shape a partir del String obteniendo su forma exterior. Introducimos está Shape en el array de shapes, junto con las formas del rectángulo y de la elipse. Cuando dibujamos o rellenamos el Shape seleccionado del array de shapes, llamamos a g2.draw(Shape) o a g2.fill(Shape).

    Podrías usar drawString para dibujar el texto en el contexto Graphics2D y luego llamar a g2.rotate (ángulo de rotación). Esto rotará todo lo que hayamos introducido dentro del contexto Graphics2D. Por eso, podríamos resetear el contexto g2 cada vez que querramos transformar una imagen particular o una parte del texto en el contexto de forma separada de otras cadenas que hayan sido renderizadas en el contexto g2.

Problema: He leido su comentario en la parte inferior de Crear y Derivar fuentes sobre el bug 4155852. Este bug ha sido cerrado sin ninguna acción. ¿Es cierto que no se puede aplicar un estilo a una fuente como Arial?

  • El problema es que la correspondencia fuente-a-estilo no funciona de forma apropiada para fuentes físicas (como Arial o Palatino). Sólo se pueden aplicar estilos a las fuentes lógicas en este momento (como Dialog o SansSerif).

    Como atajo hasta que se corrija el bug, podrías hacer lo siguiente:

     Font f = new Font("Palatino Bold", Font.PLAIN, 12); 
    

    en lugar de :

                       
     Font f = new Font("Palatino", Font.BOLD, 12);
    
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados