14th June 2010 Java 2D
Java 2D
En java existe la clase Graphics para el manejo de graficos ya sea dibujar lineas,
cuadrados, circulos, etc. Tambien existe la clase Graphics2D la cual hereda de
Graphics pero esta contiene metodos que no posee su superclase. Aqui vamos a
trabajar con la clase Graphics2D, ahora vamos a ver como hacer lineas,
cuadrados, rectangulos, circulos, y algunas otras figuras mas.
Imágenes
[http://1.bp.blogspot.com/_73t-
OXs9bAc/TTi6pxvT6bI/AAAAAAAAAOc/TVAXL7aaUzM/s1600/graficos1.png]
[http://2.bp.blogspot.com/_73t-OXs9bAc/TTi6qEjZ67I/AAAAAAAAAOg/gzS0-
QrV6Cw/s1600/graficos2.png]
[]
Lineas
Para poder dibujar una linea se necesitan cuatro parametros, que son la posicion X
y Y del punto inicial y la posicion X y Y del punto final. Para dibujar una linea se usa
el metodo drawLine, su estructura es la siguiente:
g2d.drawLine(int x1, int y1, int x2, int y2);
g2d es un objeto de Graphics2D.
Cuadrados y Rectangulos
Para dibujar cuadrados o rectangulos se usa el mismo metodo, el cual recibe
cuatro parametros, el primero es el valor de X del punto incial, el segundo el valor
de Y del punto inicial, el tercero el valor del ancho del cuadrado o rectangulo, y el
cuarto el valor del alto del cuadrado o rectangulo. El metodo es el drawRect de la
clase Graphics, ademas existe la posibilidad de hacer un cuadrado o un rectangulo
relleno, esto se hace con el metodo fillRect de la misma clase. La estructura de
estos dos metodos es la siguiente:
g2d.drawRect(int x, int y, int ancho, int alto);
g2d.fillRect(int x, int y, int ancho, int alto);
g2d es un objeto de Graphics2D.
Circulos
Para dibujar circulo o ovalos, se usa el metodo drawOval de la clase Graphics, este
metodo recibe cuatro parametros, los dos primeros son el valor de X y Y del punto
inicial, el tercero es el valor ancho y el cuarto el valor del alto. Tambien se pueden
dibujar circulos rellenos, con el metodo fillOval de la clase Graphics. La estructura
de estos deos metodo es la siguiente:
g2d.drawOval(int x, int y, int ancho, int alto);
g2d.fillOval(int x, int y, int ancho, int alto);
g2d es un objeto de Graphics2D.
Otras Métodos de la clase Graphics y Graphics2D
Ademas de los métodos mencionados anteriormente, estas dos clases nos
proporcionan métodos para cambiar el color de las lineas, dibujar texto, polígonos,
arcos, cambiar la fuente de los textos, etc. Ahora veremos la estructura y una
pequeña explicación de los métodos mencionados:
g2d.drawString(String texto, int x, int y);
g2d.drawString(String texto, float x, float y);
Estos dos métodos dibujan un texto en la posición que se indica con el valor de X y
en Y.
g2d.drawRoundRect(int x, int y, int ancho, int alto, int diametrohorizontal, int
diametrovertical);
Esto nos dibuja un rectangulo o cuadrado con esquinas redondeadas, para esto
hay que mandarle el valor de X y Y del punto inicial, el valor del ancho y alto, y el
diametro horizontal y vertical para poder crear las puntas redondeadas.
g2d.drawPolygon(int x[], int y[], int numerodepuntos);
Esto dibuja un poligono, hay que mandarle un array o un vector, con los puntos en
X y Y, y el numero de puntos.
g2d.setColor(Color color);
Esto modifica el color para dibujar o rellenar.
g2d.setFont(Font letra);
Esto modifica el tipo de letra del texto a dibujar.
g2d.setArc(int x, int y, int ancho, int alto, int anguloinicio, int anguloarco);
Esto dibuja un arco, hay que mandarle el valor de X y Y del punto inicial, el alto, el
ancho, el angulo de inicio y por ultimo el angulo del arco.
Applet
Este Applet nos muestra algunos de los metodos de la clase Graphics2D,
seleccionas la figuras que deseas dibujar y luego haces clic en la parte de abajo y
arrastras hasta donde desees que termine la figura.
Codigo del Applet
Clase Principal
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Principal extends JApplet {
PanelDibujo pd;
JRadioButton linea;
JRadioButton cuadrado;
JRadioButton rectangulo;
JRadioButton circulo;
public void init(){
setLayout(new BorderLayout());
pd=new PanelDibujo(this);
JPanel panelBotones=new JPanel();
linea=new JRadioButton("Linea");
cuadrado=new JRadioButton("Cuadrado");
rectangulo=new JRadioButton("Rectangulo");
circulo=new JRadioButton("Circulo");
linea.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
pd.setForma(1);
pd.setX1(0);
pd.setX2(0);
pd.setY1(0);
pd.setY2(0);
pd.setAncho(0);
pd.setAlto(0);
pd.repaint();
repaint();
}
});
cuadrado.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
pd.setForma(2);
pd.setX1(0);
pd.setX2(0);
pd.setY1(0);
pd.setY2(0);
pd.setAncho(0);
pd.setAlto(0);
repaint();
}
});
rectangulo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
pd.setForma(3);
pd.setX1(0);
pd.setX2(0);
pd.setY1(0);
pd.setY2(0);
pd.setAncho(0);
pd.setAlto(0);
repaint();
}
});
circulo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
pd.setForma(4);
pd.setX1(0);
pd.setX2(0);
pd.setY1(0);
pd.setY2(0);
pd.setAncho(0);
pd.setAlto(0);
repaint();
}
});
ButtonGroup grupo=new ButtonGroup();
grupo.add(linea);
grupo.add(cuadrado);
grupo.add(rectangulo);
grupo.add(circulo);
panelBotones.add(linea);
panelBotones.add(cuadrado);
panelBotones.add(rectangulo);
panelBotones.add(circulo);
add(panelBotones,BorderLayout.NORTH);
add(pd,BorderLayout.CENTER);
}
}
Esta clase es la que declara los radio botones, y un ButtonGroup para evitar que se
seleccionen mas de un boton. Al ser seleccionado algun boton este le dice al panel
que debe dibujar.
Clase PanelDibujo
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
public class PanelDibujo extends JPanel {
int x1;
int y1;
int x2=0;
int y2=0;
int ancho;
int alto;
int forma=0;
Principal p;
public PanelDibujo(Principal prin){
p=prin;
setDoubleBuffered(true);
MouseListener ml=new MouseListener() {
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
x1=e.getX();
y1=e.getY();
}
public void mouseExited(MouseEvent arg0) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseClicked(MouseEvent e) {
}
};
MouseMotionListener mml=new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
x2=e.getX();
y2=e.getY();
ancho=e.getX()-78;
alto=e.getY()-76;
p.repaint();
repaint();
}
};
addMouseListener(ml);
addMouseMotionListener(mml);
}
public void paintComponent(Graphics g){
super.paintComponents(g);
Graphics2D g2d=(Graphics2D)g;
if(forma==1){
g2d.drawLine(x1, y1, x2, y2);
}
if(forma==2){
g2d.drawRect(x1, y1, ancho, ancho);
}
if(forma==3){
g2d.drawRect(x1, y1, ancho, alto);
}
if(forma==4){
g2d.drawOval(x1, y1, ancho, alto);
}
}
public int getX1() {
return x1;
}
public void setX1(int x1) {
this.x1 = x1;
}
public int getY1() {
return y1;
}
public void setY1(int y1) {
this.y1 = y1;
}
public int getX2() {
return x2;
}
public void setX2(int x2) {
this.x2 = x2;
}
public int getY2() {
return y2;
}
public void setY2(int y2) {
this.y2 = y2;
}
public int getAncho() {
return ancho;
}
public void setAncho(int ancho) {
this.ancho = ancho;
}
public int getAlto() {
return alto;
}
public void setAlto(int alto) {
this.alto = alto;
}
public int getForma() {
return forma;
}
public void setForma(int forma) {
this.forma = forma;
}
}
Esta clase lo que hace es crear un panel personalizado, el cual es el encargado de
dibujar las figuras. Como se puede observar esta clase usa los metodos para
dibujar una linea, cuadrado, rectangulo y circulo.
Posted 14th June 2010 by Anonymous
Labels: Figuras en java, java2D
3 Algún comentario?
Anonymous 2 de septiembre de 2010, 10:07
Muy interesante tu explicacion me quedo una duda como se modifica el alto y
el ancho de un triangulo dibujado a punta de g.drawline..
y mas a un si yo no lo quiero modificar desde el codigo si no que el usuario lo
aga .
Reply
Anonymous 13 de septiembre de 2010, 12:16
Ya publique un Applet que hace exactamente lo que me estas preguntando. Si
tienes otra duda avisame.
Reply
Anonymous 22 de mayo de 2011, 11:19
Yo lo que quería era dibujar todas las relaciones que utiliza UML, ósea que en
las puntas de las líneas se pueda diferenciar: la flecha de dependencia,
composición, agregación y herencia. Se puede hacer con Java2D??? me
podrías ayudar con un ejemplito???
Muchas gracias de antemano.
Reply
Introduce tu comentario...
Comentar como: ACTIVIDAD ET Cerrar sesión
Publicar Vista previa Avisarme