Java
Ejercicios
Ejercicios
  • 02-Estructuras de control y bucles
    • Ejercicios de estructuras de control
    • Ejercicios de estructuras de control II
  • 06-Patrones de diseño
    • Ejercicio MVC en JAVA
  • 08-Flujos y Ficheros
    • Ejercicio de Redirección y Comunicación entre Procesos en Java
    • Ejercicio de Comunicación y Sincronización entre Tres Procesos en Java
  • 08-Flujos y Ficheros
  • 10-Swing
    • Ejercicio Aplicación de Notas Simples
    • Ejercicio Cálculadora básica
    • Ejercicio: Aplicación de Lista de Tareas con layouts
    • Ejercicio: Dibujo de figuras con Graphics
    • Ejercicio: Aplicación de Control de Color de un Rectángulo
    • Ejercicio: Dibujo de una clase vista
  • 03-Arrays y colecciones
    • 03.01-Arrays
      • Sistema de Gestión de Cine
      • Ejercicios básicos de arrays
    • 03.02-Colecciones
      • Sistema de Gestión de Canales de YouTube
  • 05-POO
    • 05.1-POO Iniciación
      • Ejercicio: Sistema de Gestión para una Biblioteca
      • Ejercicio de arrays. Aventura de los Patapons
      • Ejercicios básicos sobre POO
    • 05.2-POO Clases Abstractas
      • Sistema de Gestión de Vehículos
    • 05.6-Generales de POO
      • Ejercicio: Sistema de Gestión de Empleados
      • Aventuras en el Laberinto Encantado
      • Ejercicio de Pasapalabra
  • Soluciones
    • 02-Estructuras de control y bucles
      • [Solución] Ejercicios de estructuras de control II
    • 06-Patrones de diseño
      • [Solucion] Ejercicio MVC en JAVA
    • 08-Flujos y Ficheros
      • Solución de Ejercicio de Redirección y Comunicación entre Procesos en Java
      • Solución de Ejercicio de Comunicación y Sincronización entre Tres Procesos en Java
    • 10-Swing
      • [Solución] Ejercicio Aplicación de Notas Simples
      • [Solución] Ejercicio Cálculadora Simple
      • [Solución] Ejercicio: Aplicación de Lista de Tareas con layouts
      • [Solución] Ejercicio: Dibujo de figuras con Graphics
      • [Solución] Ejercicio: Dibujo de figuras con Graphics
      • [Solución] Ejercicio: Aplicación de Control de Color de un Rectángulo
    • 03-Arrays y colecciones
      • 03.01-Arrays
        • [Solución] Ejercicios de estructuras de control 2
        • [Solución] Sistema de Gestión de Cine
        • [Solución] Ejercicios básicos de arrays
      • 03.02-Colecciones
        • [Solución] Sistema de Gestión de Canales de YouTube
    • 05-POO
      • 05.1-POO Iniciación
        • [Solución] Ejercicio de arrays. Aventura de los Patapons
        • [Solución] Ejercicios básicos sobre POO
      • 05.2-POO Clases Abstractas
        • [Solución] Sistema de Gestión de Vehículos
      • 05.6-Generales de POO
        • Solución de Sistema de Gestión de Empleados
        • [Solución] Aventuras en el Laberinto Encantado
        • [Solución] Ejercicio de Pasapalabra
Powered by GitBook
On this page
  • Modelo: Circulo
  • Vista: Vista
  • Controlador: Controlador
  • Principal: Main
  1. Soluciones
  2. 10-Swing

[Solución] Ejercicio: Dibujo de figuras con Graphics

Modelo: Circulo

import java.awt.Color;

public class Circulo{
    
    private Color color;
    private int radio, x, y;

    public Circulo(int x, int y, int radio){

        this.color = Color.BLACK;
        this.radio = radio;
        this.x = x;
        this.y = y;
    }
    public Color getColor(){
        return this.color;
    }

    public int getRadio(){
        return this.radio;
    }

    public void setColor(Color c){
        this.color = c;
    }

    public void setRadio(int r){
        this.radio = r;
    }

    public int getX(){
        return this.x;
    }

    public int getY(){
        return this.y;
    }

    public void setX(int x){
        this.x = x;
    }

    public void setY(int y){
        this.y = y;
    }

}

Vista: Vista

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import javax.swing.*;

public class Vista extends JFrame {
    private Circulo modelo;
    private JComboBox<String> comboColor;
    private JSlider sliderRadio;
    private JPanel panelDibujo;
    private ArrayList <Circulo> listaCirculos;

    public Vista (Circulo modelo){
        this.modelo = modelo;
        this.listaCirculos = new ArrayList<Circulo>();

        //Al extender de JFrame no es necesario crear un JFrame frame = new JFrame(); 

        setTitle("Dibujar de circulos");
        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        //crear y configurar JComboBox y JSlider

        //para añadir los colores a un JComboBox se puede hacer de dos formas
        //1. usando el método addItem
        //ej:comboColor.addItem("Rojo");
        //2. pasando un array de String en el constructor
        //ej: comboColor = new JComboBox<String>(new String[]{"Rojo", "Verde", "Azul"});

        comboColor = new JComboBox<String>(new String[]{"Rojo", "Verde", "Azul"});

        //Puedes establecer la posición del slider en el constructor (ej: new JSlider(JSlider.HORIZONTAL, 1, 100, 10);) o, si lo dejas por defecto, será HORIZONTAL
        sliderRadio = new JSlider( 1, 100, 10);

        //Panel superior
        JPanel panelSuperior = new JPanel();
        panelSuperior.add(comboColor);
        panelSuperior.add(sliderRadio);
        panelSuperior.setLayout(new GridLayout(2,1));
        add(panelSuperior, BorderLayout.NORTH);
        //panel de dibujo
        panelDibujo = new JPanel(){
            
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                  for (int i = 0; i < listaCirculos.size(); i++){
                      //establecer color
                    g.setColor(listaCirculos.get(i).getColor());                

                     //establecer forma de figura
                    g.fillOval( listaCirculos.get(i).getX(), listaCirculos.get(i).getY(), listaCirculos.get(i).getRadio()*2, listaCirculos.get(i).getRadio()*2);
                    
                //     //Otra forma hacerlo
                //     //Circulo circulo = listaCirculos.get(i);
                //     //g.setColor(circulo.getColor());
                //     //g.fillOval(circulo.getX(), circulo.getY(), circulo.getRadio()*2, circulo.getRadio()*2);
                    

                 }

            }
        };

        //establecer color de fondo
        panelDibujo.setBackground(Color.WHITE);

        //añadir un evento de escucha de ratón

        //se utiliza MouseAdapter para poder utilizar sólo el método de mouseClicked. En caso de utilizar MouseListener, tendriamos que llamar a todos los metodos.
        panelDibujo.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                // System.out.println("hola");
                // //establecer funcionalidad cuando se hace click
                // listaCirculos.add(new Circulo(e.getX(), e.getY(), sliderRadio.getValue()));
                // //cambiar el color al que quiera el usuario
                // modelo.setColor(conversionColor(comboColor.getSelectedItem().toString()));

                // //volver a pintar la figura
                // repaint();


                Color color = conversionColor(comboColor.getSelectedItem().toString());
                int radio = sliderRadio.getValue();
                Circulo circulo = new Circulo(e.getX(), e.getY(), radio);
                circulo.setColor(color);
                listaCirculos.add(circulo);
                
                repaint();

            }
        });

        add(panelDibujo, BorderLayout.CENTER);
    }

    public JComboBox<String> getComboColor(){
        return comboColor;
    }

    public JSlider getSliderRadio(){
        return sliderRadio;
    }

    private Color conversionColor(String color){
        Color colorObjeto = Color.BLACK;
        switch (color) {
            case "Rojo":
                colorObjeto = Color.RED;
                break;
            case "Verde":
                colorObjeto = Color.GREEN;
                break;
            case "Azul":
                colorObjeto = Color.BLUE;
                break;
        }
        return colorObjeto;
    }

}

Controlador: Controlador

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.event.*;

public class Controlador{
    private Circulo modelo;
    private Vista vista;



    public Controlador(Circulo modelo, Vista vista){
        this.modelo = modelo;
        this.vista = vista;

        //añadir los listener a los componentes
        this.vista.getComboColor().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e){

                //System.out.println("El color seleccionado es: " + vista.getComboColor().getSelectedItem());
                modelo.setColor(conversionColor(vista.getComboColor().getSelectedItem().toString()));
            }
        });
        
        this.vista.getSliderRadio().addChangeListener(new ChangeListener (){
            @Override
            public void stateChanged(ChangeEvent e){
                modelo.setRadio(vista.getSliderRadio().getValue());
            }
        });

    }

    //metodo necesario para convertir el string del combocolor en objeto Color

    private Color conversionColor(String color){
        Color colorObjeto = Color.BLACK;
        switch (color) {
            case "Rojo":
                colorObjeto = Color.RED;
                break;
            case "Verde":
                colorObjeto = Color.GREEN;
                break;
            case "Azul":
                colorObjeto = Color.BLUE;
                break;
        }
        return colorObjeto;
    }
}

Principal: Main

public class Main{
    public static void main(String[] args){
        int x = 10;
        int y = 10;
        int radio = 5;
        Circulo modelo = new Circulo (x, y, radio);
        Vista vista = new Vista(modelo);
        Controlador controlador = new Controlador (modelo, vista);

        vista.setVisible(true);
    }
}
Previous[Solución] Ejercicio: Dibujo de figuras con GraphicsNext[Solución] Ejercicio: Aplicación de Control de Color de un Rectángulo

Last updated 1 year ago