Java - AYUDA, POR FAVOR

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

AYUDA, POR FAVOR

Publicado por Jesus (1 intervención) el 25/03/2020 02:24:49
Hilo

por favor es urgente
ya hice el diseño, solamente tengo complicaciones sobre el codigo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-4
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

AYUDA, POR FAVOR

Publicado por Kabuto (1381 intervenciones) el 25/03/2020 21:59:48
Quizás sería mejor que mostrases tu código y a partir de él, intentar ayudarte a completar o corregir lo que sea.
Lo digo porque la forma de encarar y resolver las cosas son muy personales de cada uno, yo te puedo mostrar un código que acabo de escribir para resolver lo que pides. Pero puede que te cueste entenderlo por mi forma de hacer las cosas, que puede ser muy distinta a la tuya.

Para la interfaz no uso ningún asistente de diseño, construyo a mano el marco, paneles, controles, etc...
El marco suelo dividirlo en distintos paneles, cada uno es una clase separada que se encarga de gestionar por su cuenta lo que ocurre con los controles que contiene.

El primer panel contiene únicamente el JLabel que va mostrando el importe según el progreso de llenado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class PanelImporte extends JPanel{
 
	private JLabel lb_importe;
 
	public PanelImporte() {
		lb_importe = new JLabel();
		setImporte(0d);
		lb_importe.setFont(new Font("Verdana", Font.BOLD, 50));
		lb_importe.setForeground(Color.BLUE);
		add(lb_importe);
		setBorder(BorderFactory.createEmptyBorder(30, 0, 10, 0));
	}
 
	public void setImporte(double importe) {
		lb_importe.setText(String.format("$%.2f", importe));
	}
 
}

El siguiente panel, contiene el Jlabel que muestra el porcentaje y la barra de progreso. Tiene varios métodos, para establecer hasta donde tiene que progresar la barra, incrementar el progreso, comprobar si ya ha terminado el progreso, etc...
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
public class PanelProgreso extends JPanel{
 
	private JLabel texto;
	private JProgressBar barra;
 
	public PanelProgreso() {
 
		texto = new JLabel();
		texto.setFont(new Font("Verdana", Font.ITALIC, 25));
		setTexto(0d);
		barra = new JProgressBar();
		barra.setPreferredSize(new Dimension(500, 50));
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		JPanel pn_texto = new JPanel();
		pn_texto.add(texto);
		JPanel pn_barra = new JPanel();
		pn_barra.add(barra);
		add(pn_texto);
		add(pn_barra);
		setBorder(BorderFactory.createEmptyBorder(0, 20, 10, 20));
	}
 
	private void setTexto(double porc) {
		texto.setText(String.format("%2d%s de gasolina cargada", (int)porc, "%"));
	}
 
	public void setProgresoMaximo(int litros) {
		barra.setMaximum(litros);
		barra.setValue(0);
		setTexto(barra.getPercentComplete());
	}
 
	public void incProgreso() {
		int valor = barra.getValue();
		valor += 2;
		barra.setValue(valor);
		setTexto(barra.getPercentComplete() * 100);
	}
 
	public int getProgreso() {
		return barra.getValue();
	}
 
	public boolean terminado() {
		return barra.getValue() == barra.getMaximum();
	}
 
}

El último panel es el que contiene el campo de texto para introducir los litros, y el botón START.
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
public class PanelLitros extends JPanel {
 
	private JTextField campo_litros;
	public JButton botonStart;
 
	public PanelLitros() {
		campo_litros = new JTextField(4);
		campo_litros.setFont(new Font("Verdana", Font.PLAIN, 35));
		botonStart = new JButton("START");
		botonStart.setFont(new Font("Verdana", Font.BOLD, 35));
		JLabel texto = new JLabel("Litros de gasolina: ");
		texto.setFont(new Font("Verdana", Font.PLAIN, 25));
		add(texto);
		add(campo_litros);
		add(botonStart);
		setBorder(BorderFactory.createEmptyBorder(0, 20, 10, 20));
	}
 
	public int getLitros() {
		try {
			return Integer.parseInt(campo_litros.getText());
		}
		catch(NumberFormatException ex) {
			JOptionPane.showMessageDialog(null, "Entrada incorrecta.\nIntroduzca un número entero",
					"Cantidad de Litros", JOptionPane.WARNING_MESSAGE);
			borraLitros();
			return 0;
		}
 
	}
 
	public void borraLitros() {
		campo_litros.setText(null);
	}
 
}

Con estos tres paneles, construyo un JFrame en la clase principal.

Esta clase tiene dos subclases anidadas dentro.
Una es para crear un ActionListener para darle funcionalidad al botón START.

La otra clase llamada LLenarTanque, que es la más importante de todas, es la que creará un hilo de ejecución separado e irá llamando a los distintos métodos de cada panel para actualizar información y comprobar el progreso.

A pesar de su importancia por ser quien pone en marcha todo el proceso, podrás ver que tiene muy poco código, ya que prácticamente lo único que tiene que hacer es llamar a métodos de los paneles en el orden adecuado.
Es lo bueno de separar en clases y hacer que cada una se encargue de lo "suyo", que luego el proceso final se simplifica.

Prueba mi código y pregunta lo que no entiendas. Pero insisto en que quizás sea mejor que entre todos intentemos a ayudarte a completar tu código.
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
public class Gasolinera extends JFrame{
 
	PanelImporte pn_importe;
	PanelProgreso pn_progreso;
	PanelLitros pn_litros;
 
	public Gasolinera() {
		pn_importe = new PanelImporte();
		pn_progreso = new PanelProgreso();
		pn_litros = new PanelLitros();
		pn_litros.botonStart.addActionListener(new AccionStart());
		setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		add(pn_importe);
		add(pn_progreso);
		add(pn_litros);
 
		setTitle("Surtidor Gasolina");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	class AccionStart implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
 
			int litros = pn_litros.getLitros();
			if (litros <= 0)
				JOptionPane.showMessageDialog(null, "Introduzca un valor entero mayor que 0",
						"Cantidad de Litros", JOptionPane.WARNING_MESSAGE);
			else {
				LLenarTanque llenar = new LLenarTanque(litros);
				llenar.start();
			}
 
		}
	}
 
	class LLenarTanque extends Thread {
 
		private int litros;
 
		public LLenarTanque(int litros) {
			this.litros = litros;
		}
 
		@Override
		public void run() {
			pn_litros.botonStart.setEnabled(false);
			pn_litros.borraLitros();
			pn_progreso.setProgresoMaximo(litros);
			pn_importe.setImporte(pn_progreso.getProgreso() * 20d);
			while(!pn_progreso.terminado()) {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				pn_progreso.incProgreso();
				pn_importe.setImporte(pn_progreso.getProgreso() * 20d);
			}
 
			JOptionPane.showMessageDialog(null, "Tanque cargado\nGracias por su compra",
					"Fin de proceso", JOptionPane.INFORMATION_MESSAGE);
			pn_litros.botonStart.setEnabled(true);
 
		}
 
	}
 
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Gasolinera();
			}
		});
	}
 
}
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