Java - Cambiar el color de una figura en java

 
Vista:

Cambiar el color de una figura en java

Publicado por Narik Daniel (1 intervención) el 31/03/2019 23:31:27
Mi duda es la siguiente, y es que estoy haciendo el clásico semáforo. Pero esta vez con figuras como el circulo y no logro hacer que cambie de color. ¿Como le hago para que la figura del circulo cambie de color al presionar el boton de cambio?

El codigo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package semaforo;
 
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Formulario extends JFrame implements ActionListener{
 
	//Creando el formulario
	JPanel base = (JPanel) this.getContentPane();
 
 
	// Creando botones
	JButton btnunico = new JButton("Cambio");
	JButton btn1 = new JButton("");
 
	// Creando el constructor para darle caracteristicas al formulario
			public Formulario() {
 
 
		// Propiedades del formulario
     		base.setLayout(null);
     		setSize(500, 600);
		    setTitle("Semaforo de un solo boton");
		    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		    setVisible(true);
 
 
		     // Propiedades de los botones
		    btnunico.setBounds(300, 100, 100, 60);
			btnunico.setFont(new Font("tahoma",Font.BOLD,15));
			btnunico.setBackground(Color.GREEN);
			btnunico.addActionListener(this);
			add(btnunico);
 
			}
 
 
 
 
 
			 boolean verde = false;
			 boolean rojo = false;
			 boolean amarillo = false;
 
 
			 public void paint(Graphics g){
 
				 super.paint (g);
				 Graphics2D circulo1 = (Graphics2D)g;
 
				 circulo1.setStroke(new BasicStroke (10.f));
				 circulo1.setPaint(Color.BLACK);
				 circulo1.fillOval(400, 400, 90, 90);
 
			     g.setColor(Color.BLACK);
		         g.fillRect(80, 80, 110, 330);
 
		         g.setColor(Color.BLACK);
		         g.fillRect(109, 410, 50, 80);
 
		         g.setColor(Color.BLACK);
		         g.fillRect(85, 490, 99, 30);
 
				 g.setColor (Color.DARK_GRAY);
		         g.fillOval(90, 100, 90, 90);
 
		         g.setColor (Color.DARK_GRAY);
		         g.fillOval(90, 200, 90, 90);
 
		       g.setColor(Color.DARK_GRAY);
		         g.fillOval(90, 300, 90, 90);
 
 
 
 
			 }
			@Override
			public void actionPerformed(ActionEvent e) {
 
 
 
 
 
				if(e.getSource() == btnunico) {
 
		            if(verde== false && amarillo == false && rojo == false) {
 
		            	verde = true;
 
 
 
 
			}
 
 
		       else if (verde == true && amarillo == false  && rojo==false) {
 
		            	amarillo = true;
 
		            }
 
 
		            else if(verde == true && amarillo == true && rojo == false) {
 
		            	rojo = true;
 
		            }
 
		            else if (verde == true && amarillo == true && rojo == true) {
 
		            	verde = false;
 
		            }
 
		            else if (verde == false && amarillo ==true && rojo == true) {
 
		            	amarillo = false;
 
		            }
 
		            else if (verde == false && amarillo == false && rojo == true) {
 
		            	rojo = false;
		            }
		            }
		            }
		            }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cambiar el color de una figura en java

Publicado por Kabuto (1381 intervenciones) el 01/04/2019 01:36:13
Hola.
Cuando pulsas el boton, alteras el valor de los booleanos para decidir los colores activos.

Tras esta alteracion, has de llamar al método repaint() para que redibuje la pantalla.

Pero con esto no es suficiente. Has de modificar el metodo paint() (cuando llamamos a repaint(), lo que hace el sistema es llamar a paint() ) de manera que el color para cada circulo se decida según el valor de los booleanos.
Es decir, si el boolean rojo es false, el circulo correspondiente se pintará en gris. Pero si es true, se pintará en rojo. Lo mismo con el resto.

Mira, te dejo aquí un código respetando al máximo lo que habías escrito.
He añadido lo que comento y resumido el código de la accion del botón para que sea más legible y menos extenso.

También he puesto los booleanos declarado al principio de la clase, que es donde deberían ir los atributos, más que nada para mantener cierto orden.

Por útlimo he añadido un metodo main() para poder ejecutar el código.

Remarco en negrita los cambios más importantes respecto a tu código.


Por cierto, ahora cambia de colores pero no se comporta como un semaforo real. Tendrás que redefinir como se modifican los booleanos para que se parezca más a un semaforo real.
Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package semaforo;
 
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Formulario extends JFrame implements ActionListener{
 
	boolean verde = false;
	boolean rojo = false;
	boolean amarillo = false;
 
	//Creando el formulario
	JPanel base = (JPanel) this.getContentPane();
 
	// Creando botones
	JButton btnunico = new JButton("Cambio");
	JButton btn1 = new JButton("");
 
	// Creando el constructor para darle caracteristicas al formulario
	public Formulario() {
 
		// Propiedades del formulario
		base.setLayout(null);
		setSize(500, 600);
		setTitle("Semaforo de un solo boton");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
 
 
		// Propiedades de los botones
		btnunico.setBounds(300, 100, 100, 60);
		btnunico.setFont(new Font("tahoma",Font.BOLD,15));
		btnunico.setBackground(Color.GREEN);
		btnunico.addActionListener(this);
		add(btnunico);
 
	}
 
	public void paint(Graphics g){
 
		super.paint (g);
		Graphics2D circulo1 = (Graphics2D)g;
 
		circulo1.setStroke(new BasicStroke (10.f));
		circulo1.setPaint(Color.BLACK);
		circulo1.fillOval(400, 400, 90, 90);
 
		g.setColor(Color.BLACK);
		g.fillRect(80, 80, 110, 330);
 
		g.setColor(Color.BLACK);
		g.fillRect(109, 410, 50, 80);
 
		g.setColor(Color.BLACK);
		g.fillRect(85, 490, 99, 30);
 
		//El color de cada circulo dependerá de los atributos booleanos
		if (rojo)
			g.setColor (Color.RED);
		else
			g.setColor (Color.DARK_GRAY);
		g.fillOval(90, 100, 90, 90);
 
		if (amarillo)
			g.setColor (Color.YELLOW);
		else
			g.setColor (Color.DARK_GRAY);
		g.fillOval(90, 200, 90, 90);
		if (verde)
			g.setColor (Color.GREEN);
		else
			g.setColor (Color.DARK_GRAY);
		g.fillOval(90, 300, 90, 90);
	}
 
	@Override
	public void actionPerformed(ActionEvent e) {
 
		if(e.getSource() == btnunico) {
 
			if(!verde && !amarillo && !rojo) {
				verde = true;
			}
			else if (verde && !amarillo && !rojo) {
				amarillo = true;
			}
			else if(verde && amarillo && !rojo) {
				rojo = true;
			}
			else if (verde && amarillo && rojo) {
				verde = false;
			}
			else if (!verde && amarillo && rojo) {
 
				amarillo = false;
			}
			else if (!verde && !amarillo && rojo) {
				rojo = false;
			}
		}
		repaint();//Tras alterar booleanos, repintamos
	}
 
	public static void main(String[] args) {
		new Formulario();
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar