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: Rectangulo
  • Vista: RectanguloVista
  • Controlador: RectanguloControlador
  • Principal: Main
  1. Soluciones
  2. 10-Swing

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

Modelo: Rectangulo

import java.awt.Color;

public class Rectangulo{
    private Color color1;
    private Color color2;

    //constructor
    public Rectangulo(){
        this.color1 = Color.BLUE;
        this.color2 = Color.GREEN;
    }

    public void setColor1(Color color1){
        this.color1 = color1;
    }
    public Color getColor1(){
        return color1;
    }
    public void setColor2(Color color2){
        this.color2 = color2;
    }
    public Color getColor2(){
        return color2;
    }
}

Vista: RectanguloVista

import javax.swing.*;
import java.awt.*;
import java.awt.Desktop.Action;
import java.awt.event.ActionListener;

public class RectanguloVista extends JFrame{
    private Rectangulo modelo;

    private JRadioButton color1Rojo;
    private JRadioButton color1Azul;
    private JRadioButton color1Verde;

    private JRadioButton color2Rojo;
    private JRadioButton color2Azul;
    private JRadioButton color2Verde;

    private ButtonGroup grupoColor1;
    private ButtonGroup grupoColor2;

    private JPanel panelDibujo;

    public RectanguloVista(Rectangulo modelo){

        this.modelo = modelo;
        setTitle("Rectángulo");
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        //configurar los radiobutton para seleccionar los colores
        color1Azul = new JRadioButton("Azul");
        color1Rojo = new JRadioButton("Rojo");
        color1Verde = new JRadioButton("Verde");
        color2Azul = new JRadioButton("Azul");
        color2Rojo = new JRadioButton("Rojo");
        color2Verde = new JRadioButton("Verde");

        //agrupar botones 
        grupoColor1 = new ButtonGroup();
        grupoColor1.add(color1Azul);
        grupoColor1.add(color1Rojo);
        grupoColor1.add(color1Verde);
        
        grupoColor2 = new ButtonGroup();
        grupoColor2.add(color2Azul);
        grupoColor2.add(color2Rojo);
        grupoColor2.add(color2Verde);

        //panel para los controles de color1
        JPanel panelColor1 = new JPanel();
        panelColor1.setBorder(BorderFactory.createTitledBorder("Color 1"));
        panelColor1.add(color1Azul);
        panelColor1.add(color1Rojo);
        panelColor1.add(color1Verde);
        
        JPanel panelColor2 = new JPanel();
        panelColor2.setBorder(BorderFactory.createTitledBorder("Color 2"));
        panelColor2.add(color1Azul);
        panelColor2.add(color1Rojo);
        panelColor2.add(color1Verde);

        //panel para dibujar el rectangulo con el gradiente de color
        panelDibujo = new JPanel(){
             @Override
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                Graphics2D rectangulo = (Graphics2D) g;

                //centrar el elemento 
                int centroX = getWidth()/2;
                int centroY = getHeight()/2;
                //dimensiones rectangulo
                int ancho = 100;
                int alto = 50;

                //dibujar el rectangulo con gradiente
                //crear gradiente
                GradientPaint gp = new GradientPaint((centroX - ancho/2),(centroY - alto /2),  modelo.getColor1(),
                                                       (centroX - ancho/2),(centroY - alto /2),  modelo.getColor2());
                //establecer color gradiente a rectangulo
                
                rectangulo.setPaint(gp);
                rectangulo.fillRect((centroX - ancho/2),(centroY - alto /2), ancho, alto);
            }
        };

        //añadir panles al JFrame
        add(panelColor1, BorderLayout.NORTH);
        add(panelColor2, BorderLayout.CENTER);
        add(panelDibujo, BorderLayout.SOUTH);
    }

    //Metodos para añadir los action listener a los radio buttons
    public void setColor1ActionListener(ActionListener listener){ 
        color1Azul.addActionListener(listener);
        color1Rojo.addActionListener(listener);
        color1Verde.addActionListener(listener);
    }
    public void setColor2ActionListener(ActionListener listener){
        color2Azul.addActionListener(listener);
        color2Rojo.addActionListener(listener);
        color2Verde.addActionListener(listener);
    }

    //Método para dibujar el rectángulo
    public void redibujar(){
        panelDibujo.repaint();
    }

    //getter y setter
    public JRadioButton getColor1Azul(){
        return color1Azul;
    }
    public JRadioButton getColor1Rojo(){
        return color1Rojo;
    }
    public JRadioButton getColor1Verde(){
        return color1Verde;
    }
    public JRadioButton getColor2Azul(){
        return color2Azul;
    }
    public JRadioButton getColor2Rojo(){
        return color2Rojo;
    }
    public JRadioButton getColor2Verde(){
        return color2Verde;
    }
}

Controlador: RectanguloControlador

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;

import javax.swing.Action;

public class RectanguloControlador{

    private Rectangulo modelo;
    private RectanguloVista vista;

    public RectanguloControlador(RectanguloVista vista, Rectangulo modelo){
        this.vista = vista;
        this.modelo = modelo;

        //asignar action listener a los radio buttons
        this.vista.setColor1ActionListener(new ActionListener() {
           @Override
           public void actionPerformed(java.awt.event.ActionEvent e) {
               //metodo que quieres realizar cuando se presione el boton.
               cambiarColor1(e);
           } 
        });

        this.vista.setColor2ActionListener(new ActionListener() {
           @Override
           public void actionPerformed(java.awt.event.ActionEvent e) {
               //metodo que quieres realizar cuando se presione el boton.
               cambiarColor2(e);
           } 
        });
    }
    private void cambiarColor1(ActionEvent e){
        if(vista.getColor1Azul().isSelected()){
            modelo.setColor1(Color.BLUE);
        }else if(vista.getColor1Rojo().isSelected()){
            modelo.setColor1(Color.RED);
        }else{
            modelo.setColor1(Color.GREEN);
        }
        vista.redibujar();

    }

    private void cambiarColor2(ActionEvent e){
        if(vista.getColor2Azul().isSelected()){
            modelo.setColor2(Color.BLUE);
        }else if(vista.getColor2Rojo().isSelected()){
            modelo.setColor2(Color.RED);
        }else{
            modelo.setColor2(Color.GREEN);
        }
        vista.redibujar();

    }
}

Principal: Main

public static void main(String[] args) {
        RectanguloModelo modelo = new RectanguloModelo();
        RectanguloVista vista = new RectanguloVista();
        RectanguloControlador controlador = new RectanguloControlador(modelo, vista);
        
        vista.setVisible(true);
    }
Previous[Solución] Ejercicio: Aplicación de Lista de Tareas con layoutsNext[Solución] Ejercicio: Dibujo de figuras con Graphics

Last updated 1 year ago