Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/11/2010, 13:50
coke21
 
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);
}
}