Cálculos y Propiedades de un Círculo con JSlider

Ir abajo

Cálculos y Propiedades de un Círculo con JSlider

Mensaje  Admin (Viruz) el Jue Sep 27, 2012 10:35 pm

Saludos a todos y como siempre esperando que estén bien estoy viendo el partido del real Madrid vs Barcelona y elaborando esta entrada y bueno aprovechando a los que nos interesa la programación les traigo un programa donde dibujas círculos aleatoriamente y te da las propiedades de cada círculo pero con una forma muy distinta a la anterior y se realiza con el componente JSlider el cual nos ayuda a desplazarnos mediante una barra si es mayor o menor nuestra circunferencia muy práctico y dinámico.
Imagen
[Tienes que estar registrado y conectado para ver este vínculo]
Lo que se necesita conocer

¿Como funciona el Programa?

  1. Creamos nuestra interfaz con JPanel, JButton y JLabels esto es al gusto de cada persona.
  2. En el evento del botón haremos que dibuje un circulo aleatoriamente seguido de los datos correspondientes .
  3. En el Panel pasaremos el círculo dibujado para que lo despliegue y un repaint.
  4. En la clase círculo tendremos la lógica del programa donde se calcularan radio, diámetro, área y circunferencia esto con sus respectivos métodos set() y get().
  5. A diferencia de la primera versión el evento vendrá del Slider por lo que ocuparemos la clase ChangeListener y el método stateChanged() dentro de él pondremos un nuevo método cambiarTamaño() pasando como parámetro el valor que esta desplegado en el slider.
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 ventana = new Ventana();
10 ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11 }
12 }

Clase Panel
01 /**
02 *
03 * @author Jesus Ivan
04 */
05 import java.awt.Graphics;
06 import javax.swing.JPanel;
07
08 public class Panel extends JPanel{
09 private Circulo circulo = new Circulo(0, 0, 150);
10
11 @Override
12 public void paintComponent(Graphics g){
13 //Se redefine y vuelve a pintar esto en swing.
14 super.paintComponent(g);
15 circulo.dibujar(g);
16 }
17
18 public void dibujar(Circulo circulo){
19 this.circulo = circulo;
20 repaint();
21 }
22 }

Clase Circulo

01 /**
02 *
03 * @author Jesus Ivan
04 */
05 import java.awt.Color;
06 import java.awt.Graphics;
07
08 public class Circulo {
09 private int x1;
10 private int y1;
11 private int radio;
12 private int diametro;
13 private float area;
14 private float circunferencia;
15
16 public Circulo(int x1, int y1, int radio){
17 cambiarUbicacion(x1, y1);
18 cambiarTamaño(radio);
19 }
20
21 public void cambiarUbicacion(int x1, int y1){
22 this.x1 = x1;
23 this.y1 = y1;
24 }
25
26 public void cambiarTamaño(int radio){
27 this.radio = radio;
28 }
29
30 public int calcularDiametro(){
31 diametro = 2 * radio;
32 return diametro;
33 }
34
35 public float calcularArea(){
36 //Math.pow Calcula y devuelve x elevado a la potencia de y.
37 area = (float)(Math.PI * Math.pow(radio, 2));
38 return area;
39 }
40
41 public float calcularCircunferencia(){
42 circunferencia = (float)(Math.PI * calcularDiametro());
43 return circunferencia;
44 }
45
46 public void dibujar(Graphics g){
47 g.setColor(Color.WHITE);
48 g.fillRect(0, 0, 500, 600);
49
50 g.setColor(Color.LIGHT_GRAY);
51 g.fillOval(x1, y1, calcularDiametro(), calcularDiametro());
52 }
53 }


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 javax.swing.JFrame;
09 import javax.swing.JSlider;
10 import javax.swing.JTextArea;
11 import javax.swing.event.ChangeEvent;
12 import javax.swing.event.ChangeListener;
13
14 public class Ventana extends JFrame{
15 private Circulo circulo;
16 private Container contenedor;
17 private JSlider slider;
18 private JTextArea calculos;
19 private Panel miPanel;
20
21 public Ventana(){
22 super("Viruz Blog: Calculo de Circulo con JSlider");
23 setSize(470, 540);
24 setBackground(Color.WHITE);
25 contenedor = getContentPane();
26
27 addComponentes();
28 addEventos();
29 setResizable(false);
30 setVisible(true);
31 }
32
33 public void addComponentes(){
34 slider = new JSlider(JSlider.VERTICAL, 100, 200, 150);
35 miPanel = new Panel();
36 circulo = new Circulo(0, 0, 150);
37 calculos = new JTextArea(": : Cálculos : :");
38
39 slider.setMajorTickSpacing(10);
40 slider.setMinorTickSpacing(5);
41 slider.setPaintTicks(true);//muestra las marcas.
42 slider.setPaintLabels(true);//Muestra los valores de las marcas.
43 slider.setBackground(Color.WHITE);
44
45 calculos.setEditable(false);
46
47 contenedor.add(slider, BorderLayout.EAST);
48 contenedor.add(miPanel, BorderLayout.CENTER);
49 contenedor.add(calculos, BorderLayout.SOUTH);
50 }
51 public void addEventos(){
52 //adición del oyente del slider
53 slider.addChangeListener(new ChangeListener(){
54 int x;
55 int y;
56
57 public void stateChanged(ChangeEvent evento) {
58 circulo.cambiarTamaño(slider.getValue());
59 miPanel.dibujar(circulo);
60 mostrarCalculos();
61 }
62 });
63 }
64
65 public void mostrarCalculos(){
66 String radio;
67 String diametro;
68 String area;
69 String circunferencia;
70 //\t alineacion de linea
71 radio = "Radio: \t" + (circulo.calcularDiametro() / 2);
72 diametro = "Diámetro: \t" + circulo.calcularDiametro();
73 area = "Área: \t" + circulo.calcularArea();
74 circunferencia = "Circunferencia: \t" + circulo.calcularCircunferencia();
75
76 //\n espacio
77 calculos.setText(radio + "\n" + diametro + "\n" + area + "\n" + circunferencia);
78 }
79 }


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.