Dibujar Figuras con Borde y Relleno

Ir abajo

Dibujar Figuras con Borde y Relleno

Mensaje  Admin (Viruz) el Sáb Oct 06, 2012 10:07 pm

De nuevo aquí con ustedes una semana más y de estreno subiendo un programa para la ayuda de ustedes, en este tiempo hemos aprendido a pintar figuras en java en un panel pero a nuestras figuras les hace falta algo como un borde y el relleno que toda figura debe tener.

De esta forma aprenderemos como ponerles un color mediante un sencillo panel que podemos activar y decir que colores queremos que se pinte nuestro borde y el relleno de la figura y se añadirá al panel que hemos venido manejando de opciones para decidir en cual se va a pintar.
Imágenes
[Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver este vínculo]
¿Como funciona el Programa?

  1. Corre el programa ya sea en NetBeans o con el .jar.
  2. Al iniciar el programa aparecerá nuestra ventana con su respectivo panel de dibujo (como en trabajos anteriores).
  3. En la parte posterior de la ventana se encontrará un grupo de RadioButton donde te permitirá escoger una opción la cual pintar (Panel de la izquierda).
  4. Después de escoger nuestra figura escogeremos en el siguiente panel el color del borde de nuestra figura (Panel de en medio), los colores son asignados al JList de manera por default.
  5. Por último en el siguiente panel escogeremos opcionalmente si queremos que nuestra figura tenga un relleno (JCheckBox) de ser así seleccionamos nuestra opción de relleno y después escogemos el color.
Código

Clase Main
01 /**
02 *
03 * @author Jesus Ivan
04 */
05 import javax.swing.JFrame;
06
07 public class Main {
08 public static void main(String[] args) {
09 Ventana miVentana = new Ventana();
10 miVentana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11 miVentana.setLocationRelativeTo(null);
12 }
13 }

Clase Ventana

01 /**
02 *
03 * @author Jesus Ivan
04 */
05 import java.awt.BorderLayout;
06 import java.awt.Color;
07 import java.awt.Container;
08 import java.awt.GridLayout;
09 import java.awt.event.*;
10 import javax.swing.*;
11 import javax.swing.border.TitledBorder;
12
13 public class Ventana extends JFrame{
14 private Container contenedor;
15 private JButton bLimpiar;
16 private Panel miPanel;
17 private JPanel pPrincipal;
18 private JPanel pFigura;
19 private JPanel pBorde;
20 private JPanel pRelleno;
21 private JRadioButton rCirculo;
22 private JRadioButton rOvalo;
23 private JRadioButton rRectangulo;
24 private JRadioButton rLinea;
25 private JComboBox cColorB;
26 private JComboBox cColorF;
27 private JCheckBox relleno;
28
29 public Ventana(){
30 super(": : Figuras by Viruz Blog : :");
31 contenedor = getContentPane();
32 setSize(700, 600);
33 setBackground(Color.YELLOW);
34 addComponentes();
35 addEventosRaton();
36 addEventos();
37 setVisible(true);
38 }
39
40 private void addComponentes(){
41 miPanel = new Panel();
42 pPrincipal = new JPanel();
43 pFigura = new JPanel();
44 pBorde = new JPanel();
45 pRelleno = new JPanel();
46 bLimpiar = new JButton(": : Limpiar Área de Dibujo : :");
47
48 //Llama alos Metodos de los paneles creados.
49 crearPanelFigura();
50 crearPanelBorde();
51 crearPanelRelleno();
52
53 miPanel.setBackground(Color.WHITE);
54 pPrincipal.setLayout(new GridLayout(1,3));
55
56 //adición paneles a panel principal
57 pPrincipal.add(pFigura);
58 pPrincipal.add(pBorde);
59 pPrincipal.add(pRelleno);
60
61 //adición de componentes a la ventana o contenedor.
62 contenedor.add(pPrincipal, BorderLayout.NORTH);
63 contenedor.add(miPanel, BorderLayout.CENTER);
64 contenedor.add(bLimpiar, BorderLayout.SOUTH);
65 }
66
67 public void crearPanelFigura(){
68 ButtonGroup grupoRadio = new ButtonGroup();
69
70 //creación de botones de radio
71 rCirculo = new JRadioButton("Círculo", true);
72 rOvalo = new JRadioButton("Óvalo");
73 rRectangulo = new JRadioButton("Rectángulo");
74 rLinea = new JRadioButton("Línea");
75
76 //asignación de oyentes
77 rCirculo.addItemListener(new ManejadorRadioBoton(0));
78 rOvalo.addItemListener(new ManejadorRadioBoton(1));
79 rRectangulo.addItemListener(new ManejadorRadioBoton(2));
80 rLinea.addItemListener(new ManejadorRadioBoton(3));
81
82 //adición a grupo de botones
83 grupoRadio.add(rCirculo);
84 grupoRadio.add(rOvalo);
85 grupoRadio.add(rRectangulo);
86 grupoRadio.add(rLinea);
87
88 //borde con título
89 pFigura.setBorder(new TitledBorder(": : Figura"));
90 pFigura.setLayout(new GridLayout(4,1));
91
92 //adición de componentes
93 pFigura.add(rCirculo);
94 pFigura.add(rOvalo);
95 pFigura.add(rRectangulo);
96 pFigura.add(rLinea);
97 }
98
99 public void crearPanelBorde(){
100 String[] nombreColor = {"NEGRO","AZUL","CYAN","VERDE"};
101 cColorB = new JComboBox(nombreColor);
102
103 //MaximumRowCount hace ver el numero de opciones que aparescan primero
104 cColorB.setMaximumRowCount(3);
105 cColorB.addItemListener(new ManejadorSeleccion());
106
107 pBorde.setBorder(new TitledBorder(": : Color de Borde"));
108 pBorde.add(cColorB);
109 }
110
111 public void crearPanelRelleno(){
112 relleno = new JCheckBox("Relleno");
113 String[] nombreColor = {"NEGRO","AZUL","CYAN","VERDE"};
114 cColorF = new JComboBox(nombreColor);
115
116 cColorF.setMaximumRowCount(3);
117 cColorF.setEnabled(false);
118
119 //adición de oyente
120 relleno.addItemListener(new ManejadorSeleccion());
121 cColorF.addItemListener(new ManejadorSeleccion());
122
123 pRelleno.setBorder(new TitledBorder(": : Color de Fondo"));
124 pRelleno.add(relleno);
125 pRelleno.add(cColorF);
126 }
127
128
129 //Eventos de ItemListener de JRadioButton
130 class ManejadorRadioBoton implements ItemListener{
131 private int opc;
132
133 public ManejadorRadioBoton(int x){
134 opc = x;
135 }
136
137 public void itemStateChanged(ItemEvent evento){
138 miPanel.setFiguraDibujar(opc);
139
140 if(opc == 3){
141 relleno.setEnabled(false);
142 cColorF.setEnabled(false);
143 miPanel.setRelleno(0);
144 }else{
145 relleno.setEnabled(true);
146 cColorF.setEnabled(true);
147 if(relleno.isSelected())
148 miPanel.setRelleno(1);
149 else
150 miPanel.setRelleno(0);
151 }
152 }
153 }
154
155 private void addEventos(){
156 //oyente anónimo del botón
157 bLimpiar.addActionListener(new ActionListener(){
158 public void actionPerformed(ActionEvent evento){
159 repaint();
160 }
161 });
162 }
163
164 //Eventos ItemListener de JComboBox
165 class ManejadorSeleccion implements ItemListener{
166 Color[] colores = {Color.BLACK, Color.BLUE, Color.CYAN, Color.GREEN};
167
168 public void itemStateChanged(ItemEvent evento){
169 if(relleno.isSelected()){
170 cColorF.setEnabled(true);
171 miPanel.setCFondo(colores[cColorF.getSelectedIndex()]);
172 miPanel.setRelleno(1);
173 }else{
174 cColorF.setEnabled(false);
175 miPanel.setRelleno(0);
176 }
177
178 miPanel.setCBorde(colores[cColorB.getSelectedIndex()]);
179 }
180 }
181
182 //Eventos de RATON.
183 private void addEventosRaton(){
184 addMouseListener(new MouseAdapter(){
185 @Override
186 public void mousePressed(MouseEvent evento){
187 miPanel.setX1(evento.getX() - 9);
188 miPanel.setY1(evento.getY() - 150);
189
190 if(miPanel.getFiguraDibujar() == 3){
191 miPanel.setLargo(miPanel.getX1());
192 miPanel.setAncho(miPanel.getY1());
193 }else{
194 miPanel.setLargo(0);
195 miPanel.setAncho(0);
196 }
197
198 miPanel.dibujar();
199 }
200 });
201
202 addMouseMotionListener(new MouseMotionAdapter(){
203 @Override
204 public void mouseDragged(MouseEvent evento){
205 if(miPanel.getFiguraDibujar() == 3){
206 miPanel.setLargo(evento.getX() - 9);
207 miPanel.setAncho(evento.getY() - 150);
208 }else{
209 miPanel.setLargo(evento.getX() - miPanel.getX1() - 9);
210 miPanel.setAncho(evento.getY() - miPanel.getY1() - 150);
211 }
212
213 miPanel.dibujar();
214 }
215 });
216 }
217 }


Clase Panel

01 /**
02 *
03 * @author Jesus Ivan
04 */
05 import java.awt.Color;
06 import java.awt.Graphics;
07 import javax.swing.JPanel;
08
09 public class Panel extends JPanel{
10 private int x1;
11 private int y1;
12 private int ancho;
13 private int largo;
14 private int relleno;
15 private int figuraDibujar;
16 private int colorActual;
17 private Color cBorde;
18 private Color cFondo;
19 private Dibujable figura;
20
21 public Panel(){
22 x1 = 0;
23 y1 = 0;
24 largo = 1;
25 ancho = 1;
26 relleno = 0;
27 figuraDibujar = 0;
28 }
29 @Override
30 public void paintComponent(Graphics g){
31 super.paintComponent(g);
32 Color[] colores = {Color.BLACK, Color.BLUE, Color.CYAN, Color.GREEN};
33 g.setColor(cBorde);
34
35 switch(figuraDibujar){
36 case 0: figura = new Circulo(x1, y1, largo, cBorde, cFondo);
37 break;
38 case 1: figura = new Ovalo(x1, y1, largo, ancho, cBorde, cFondo);
39 break;
40 case 2: figura = new Rectangulo(x1, y1, largo, ancho, cBorde, cFondo);
41 break;
42 case 3: figura = new Linea(x1, y1, largo, ancho, cBorde);
43 break;
44 }
45
46
47 if(relleno == 0)
48 figura.dibujar(g);
49 else
50 figura.dibujar(g, cFondo);
51 }
52
53 public void dibujar(int colorActual){
54 this.colorActual = colorActual;
55 repaint();
56 }
57
58 public void dibujar(){
59 repaint();
60 }
61 // MÉTODOS set Y get
62 public int getX1() {
63 return x1;
64 }
65
66 public void setX1(int x1) {
67 this.x1 = x1;
68 }
69
70 public int getY1() {
71 return y1;
72 }
73
74 public void setY1(int y1) {
75 this.y1 = y1;
76 }
77
78 public int getAncho() {
79 return ancho;
80 }
81
82 public void setAncho(int ancho) {
83 this.ancho = ancho;
84 }
85
86 public int getLargo() {
87 return largo;
88 }
89
90 public void setLargo(int largo) {
91 this.largo = largo;
92 }
93
94 public int getRelleno() {
95 return relleno;
96 }
97
98 public void setRelleno(int relleno) {
99 this.relleno = relleno;
100 }
101
102 public Color getCBorde() {
103 return cBorde;
104 }
105
106 public void setCBorde(Color cBorde) {
107 this.cBorde = cBorde;
108 }
109
110 public Color getCFondo() {
111 return cFondo;
112 }
113
114 public void setCFondo(Color cFondo) {
115 this.cFondo = cFondo;
116 }
117
118 public int getFiguraDibujar() {
119 return figuraDibujar;
120 }
121
122 public void setFiguraDibujar(int figuraDibujar) {
123 this.figuraDibujar = figuraDibujar;
124 }
125 }


Vídeo
[Tienes que estar registrado y conectado para ver este vínculo]

Descarga el Código
[Tienes que estar registrado y conectado para ver este vínculo]

Autor: Viruz study
Enlace: [Tienes que estar registrado y conectado para ver este vínculo]

_________________
[Tienes que estar registrado y conectado para ver esa imagen]
avatar
Admin (Viruz)
Admin

Mensajes : 148
Fecha de inscripción : 23/09/2012
Edad : 30
Localización : Desktop

http://viruz.foroactivo.mx

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.