25/11/2010, 13:50
|
| | Fecha de Ingreso: noviembre-2010 Ubicación: chile
Mensajes: 24
Antigüedad: 14 años, 1 mes 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);
}
} |