[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