[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