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

Escribir texto en un graphics2d???

Estas en el tema de Escribir texto en un graphics2d??? en el foro de Java en Foros del Web. ola muchachos....... estoy asiendo un programa que crea diagramas de flujos.... tengo una clase panel, en esta clase dibujo las figuras de inicio,entrada,etc....redimensiono,etc mi problema ...
  #1 (permalink)  
Antiguo 25/11/2010, 01:57
 
Fecha de Ingreso: noviembre-2010
Ubicación: chile
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Escribir texto en un graphics2d???

ola muchachos.......
estoy asiendo un programa que crea diagramas de flujos....
tengo una clase panel, en esta clase dibujo las figuras de inicio,entrada,etc....redimensiono,etc

mi problema esta en que quiero que se pueda escribir texto dentro de una figura,es para escribir las variables y expresiones dentro de la figura.....por ejemplo quiero tener algo donde editar texto ,algo parecido a un jtextcomponent ,
bueno e intentado con jtextArea y con otros textComponente y no me funciona ....me he dado cuenta que es
por que quiero escribir sobre un objeto grafico.............
xfavor si me pueden ayudar serie de gran ayuda.....tenia la nocion que ouede ser algo con TextLayout...para
crear mi propio campo de texto de acuerdo a las necesidades de mi programa
ademas mi idea es poder escribir texto dentro de las figuras(las figuras son de la libreria java.awt.geom , como por ejemplo rectangle2d y otros)y modificar ademas el tamano,tipo de fuente....pero lo mas importante es por escribir texto sobre un graphics2d

cualquier comentario me sirve
graxias por leer!!!

Última edición por coke21; 25/11/2010 a las 02:37
  #2 (permalink)  
Antiguo 25/11/2010, 07:49
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Escribir texto en un graphics2d???

Hola:

La clase Graphics tiene un método para eso, se llama drawString(....).
Lo puedes ver en la doc:
http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Graphics.html

slds;

Nup_
  #3 (permalink)  
Antiguo 25/11/2010, 13:50
 
Fecha de Ingreso: noviembre-2010
Ubicación: chile
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Escribir texto en un graphics2d???

hola gracias por leer.....

conozco lo q tu me dices.....el problema es que quiero poder editar texto,usar las teclas izq,der,arriba,abajo,para poder mover el cursor......y poder escribir o borrar el texto.....en si poder editar como cualquier jcomponent........el asunto es que un panel con un objeto graphics2d no admite que se pueda agregar un jcomponent como jtextarea.....


bueno encontre este programa creo que es camino que debo seguir en la implementacion......x si akaso no es mi programa.....
donde si mi figura es un rectangulo de proceso.....hacer q la figura tenga un text layout dentro de el y poder editar


aki esta el codigo

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.TextHitInfo;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TextLayoutPanel extends JPanel {
TextLayout layout;

FontRenderContext frc;

Font font;

Rectangle2D rect;

float rx, ry, rw, rh;

TextHitInfo hitInfo;

Color caretColor;

int hit1, hit2;

int w, h;

public TextLayoutPanel() {
setBackground(Color.white);
setForeground(Color.black);
setSize(400, 200);
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
w = getWidth();
h = getHeight();

String text = "Java Source and Support";
font = new Font("Arial", Font.PLAIN, 36);
frc = new FontRenderContext(null, false, false);
layout = new TextLayout(text, font, frc);

rx = (float) (w / 2 - layout.getBounds().getWidth() / 2);
ry = (float) 3 * h / 4;
rw = (float) (layout.getBounds().getWidth());
rh = (float) (layout.getBounds().getHeight());
rect = new Rectangle2D.Float(rx, ry, rw, rh);

caretColor = getForeground();
}

public void update(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
paintComponent(g);
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
AffineTransform at = AffineTransform.getTranslateInstance(rx, ry);

Shape hilight = layout.getLogicalHighlightShape(hit1, hit2);
hilight = at.createTransformedShape(hilight);
g2.setColor(Color.lightGray);
g2.fill(hilight);

g2.setColor(Color.black);
layout.draw(g2, rx, ry);

// Draw caret
Shape[] caretShapes = layout.getCaretShapes(hit1);
Shape caret = at.createTransformedShape(caretShapes[0]);
g2.setColor(caretColor);
g2.draw(caret);
}

public int getHitLocation(int mouseX, int mouseY) {
hitInfo = layout.hitTestChar(mouseX, mouseY, rect);
return hitInfo.getInsertionIndex();
}

class MouseHandler extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
caretColor = getForeground();
hit1 = getHitLocation(e.getX(), e.getY());
hit2 = hit1;
repaint();
}

public void mousePressed(MouseEvent e) {
caretColor = getForeground();
hit1 = getHitLocation(e.getX(), e.getY());
hit2 = hit1;
repaint();
}

public void mouseReleased(MouseEvent e) {
hit2 = getHitLocation(e.getX(), e.getY());
repaint();
}
}

class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
caretColor = getBackground();
hit2 = getHitLocation(e.getX(), e.getY());
repaint();
}
}

public static void main(String arg[]) {
JFrame frame = new JFrame();
frame.setBackground(Color.white);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add("Center", new TextLayoutPanel());
frame.pack();
frame.setSize(new Dimension(400, 300));
frame.setVisible(true);
}
}
  #4 (permalink)  
Antiguo 26/11/2010, 11:24
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Escribir texto en un graphics2d???

Hola:

Pues parece entonces q la única opción es esa, crear tu propio componente personalizado.
¿Podrías poner la fuente donde encontraste ese código? De todas formas gracias por compartirlo

slds;

Nup_
  #5 (permalink)  
Antiguo 26/11/2010, 13:04
 
Fecha de Ingreso: noviembre-2010
Ubicación: chile
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Escribir texto en un graphics2d???

HOLA
mira esta es la pagina

http://www.java2s.com/Code/Java/2D-Graphics-GUI/Text-Layout.htm

aqui salen varios ejemplos relacionados con textlayout y como pintar
en un objetro grafico.....y de otros tipos, el codigo anterior sale en el

15. Caret and TextLayout , ojala te sea de ayuda al igual que a mi

salu2s
  #6 (permalink)  
Antiguo 26/11/2010, 13:05
 
Fecha de Ingreso: noviembre-2010
Ubicación: chile
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Escribir texto en un graphics2d???

HOLA
mira esta es la pagina

http://www.java2s.com/Code/Java/2D-Graphics-GUI/Text-Layout.htm

aqui salen varios ejemplos relacionados con textlayout y como escribir
en un objetro grafico.....y de otros tipos, el codigo anterior sale en el

15. Caret and TextLayout , ojala te sea de ayuda al igual que a mi

salu2s

Etiquetas: escribir
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 02:44.