[Solución] Ejercicio: Aplicación de Control de Color de un Rectángulo

Clase vista: RectanguloColorVista

import javax.swing.*;
import java.awt.*;

public class RectanguloColorVista extends JFrame {
    private RectanguloColorModelo modelo;
    private JSlider sliderRojo, sliderVerde, sliderAzul;
    private JTextField textoRojo, textoVerde, textoAzul;
    private JPanel rectanguloPanel;

    public RectanguloColorVista(RectanguloColorModelo modelo) {
        this.modelo = modelo;
        setTitle("Control de Color de Rectángulo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JPanel controlesPanel = new JPanel(new GridLayout(3, 3));
        sliderRojo = new JSlider(0, 255, 0);
        sliderVerde = new JSlider(0, 255, 0);
        sliderAzul = new JSlider(0, 255, 0);
        textoRojo = new JTextField(3);
        textoVerde = new JTextField(3);
        textoAzul = new JTextField(3);

        controlesPanel.add(new JLabel("Rojo:"));
        controlesPanel.add(sliderRojo);
        controlesPanel.add(textoRojo);
        controlesPanel.add(new JLabel("Verde:"));
        controlesPanel.add(sliderVerde);
        controlesPanel.add(textoVerde);
        controlesPanel.add(new JLabel("Azul:"));
        controlesPanel.add(sliderAzul);
        controlesPanel.add(textoAzul);

        rectanguloPanel = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.setColor(model.getColor());
                g.fillRect(10, 10, getWidth() - 20, getHeight() - 20);
            }
        };

        add(controlesPanel, BorderLayout.NORTH);
        add(rectanguloPanel, BorderLayout.CENTER);

        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    // Getters para sliders y text fields
    public JSlider getsliderRojo() { return sliderRojo; }
    public JSlider getsliderVerde() { return sliderVerde; }
    public JSlider getsliderAzul() { return sliderAzul; }
    public JTextField gettextoRojo() { return textoRojo; }
    public JTextField gettextoVerde() { return textoVerde; }
    public JTextField gettextoAzul() { return textoAzul; }
    public JPanel getrectanguloPanel() { return rectanguloPanel; }
}

Clase controlador: RectanguloColorControlador

import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RectanguloColorControlador {
    private RectanguloColorModelo model;
    private RectanguloColorVista vista;

    public RectanguloColorControlador(RectanguloColorModelo model, RectanguloColorVista vista) {
        this.model = model;
        this.vista = vista;

        // Controladores para los sliders
        ChangeListener changeListener = new ChangeListener() {
            public void stateChanged(ChangeEvent e) {

                model.setColor(vista.getSliderRed().getValue(), vista.getSliderGreen().getValue(), vista.getSliderBlue().getValue())
                vista.gettextoRojo().setText(String.valueOf(model.getRojo()));
                vista.getTextoVerde().setText(String.valueOf(model.getVerde()));
                vista.getTextoAzul().setText(String.valueOf(model.getAzul()));
                vista.getrectanguloPanel().repaint();
            }
        };

        vista.getsliderRojo().addChangeListener(changeListener);
        vista.getsliderVerde().addChangeListener(changeListener);
        vista.getsliderAzul().addChangeListener(changeListener);
    }
}

Last updated