Java - programa el java con botones

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

programa el java con botones

Publicado por Diego (6 intervenciones) el 29/08/2019 05:54:04
necesito llenar una matriz con botones (jframe) de la tabla de posiciones de la liga colombiana y luego sacar tres estadísticas y pues no se como hacerlo.
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: 1.775
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa el java con botones

Publicado por Kabuto (441 intervenciones) el 29/08/2019 11:41:45
Vas a tener que explicarte mejor.

¿En la matriz quieres meter botones? ¿O en la matriz quieres meter los datos de la liga para luego computarlos al pulsar los correspondientes botones?

¿Y qué estadísticas necesitas?

¿Y qué aspecto debería tener la interfaz? Hacer un dibujo por ejemplo con Paint o con lápiz y papel, aunque no quede bonito, ayuda mucho a hacerse una idea de los elementos que vamos a necesitar: botones, campos de texto,... y donde se podrían colocar. Así luego es más fácil escribir el programa que no ir metiendo elementos según se nos va ocurriendo y luego a ver como se maquetan...
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
sin imagen de perfil
Val: 16
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

programa el java con botones

Publicado por Diego (6 intervenciones) el 29/08/2019 20:07:25
cacture

en la imagen estan los datos para llenar la matriz y las tres estadisticas que necesito que son tres
1.Equipos con menos puntos
2.total de goles en toda la liga
3.Equipo con mas goles a favos
exacto es eso lo que necesito ( en la matriz meter los datos de la liga para luego computarlos al pulsar los correspondientes botones)
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
Imágen de perfil de Kabuto
Val: 1.775
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa el java con botones

Publicado por Kabuto (441 intervenciones) el 01/09/2019 19:34:53
Vale. ¿Y tiene que ser una matriz?

Lo digo porque quizás creando una clase Equipo con todos esos atributos y guardando los equipos en un array simple sea más versátil que no con una matriz.
Tanto de una forma como de otra, se podría llenar la tabla de datos y obtener las estadísticas.
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
Imágen de perfil de Kabuto
Val: 1.775
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

programa el java con botones

Publicado por Kabuto (441 intervenciones) el 03/09/2019 13:45:42
Bueno, lo haremos con una matriz.

Para organizarlo mejor, podemos crear una clase que contenga la matriz, se encargue de llenarla con los datos y tenga los métodos necesarios para obtener los tres datos estadísticos que nos solicitan.
Como además de datos numéricos, tenemos un dato String (el nombre del equipo) podemos declarar una matriz de tipo Object, así podemos combinar distintos tipos de datos en la misma matriz. Luego al acceder a los datos, tan solo habrá que recordar hacer casting a String o a int según corresponda.

Esta clase haría la función de "Modelo"


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
public class MatrizEquipos {
 
	private Object[][] matriz;
 
	public MatrizEquipos() {
		matriz = new Object[20][10];
		llenarMatriz();
	}
 
	public Object[][] getMatriz() {
		return matriz;
	}
 
	private void llenarMatriz() {
		matriz[0] = new Object[] {1, "America", 17, 8, 5, 1, 2, 10, 8, 2};
		matriz[1] = new Object[] {2, "Nacional", 16, 8, 4, 0, 4, 15, 6, 9};
		matriz[2] = new Object[] {3, "Millonarios", 16, 7, 5, 1, 1, 12, 8, 4};
		matriz[3] = new Object[] {4, "Alianza", 15, 8, 4, 1, 3, 7, 4, 3};
		matriz[4] = new Object[] {5, "Cali", 14, 8, 4, 2, 2, 11, 6, 5};
		matriz[5] = new Object[] {6, "Patriotas", 12, 8, 3, 2, 3, 10, 7, 3};
		matriz[6] = new Object[] {7, "Tolima", 11, 8, 3, 3, 2, 10, 5, 5};
		matriz[7] = new Object[] {8, "Envigado", 11, 8, 3, 3, 2, 9, 9, 0};
		matriz[8] = new Object[] {9, "Cucuta", 11, 7, 3, 2, 2, 9, 10, -1};
		matriz[9] = new Object[] {10, "Aguilas", 11, 8, 3, 3, 2, 8, 11, -3};
		matriz[10] = new Object[] {11, "Pasto", 10, 7, 2, 1, 4, 10, 6, 4};
		matriz[11] = new Object[] {12, "Medellin", 10, 8, 3, 4, 1, 12, 11, 1};
		matriz[12] = new Object[] {13, "Once Caldas", 10, 8, 2, 2, 8, 8, 7, 1};
		matriz[13] = new Object[] {14, "Junior", 10, 8, 3, 4, 1, 3, 5, -2};
		matriz[14] = new Object[] {15, "Bucamaranga", 9, 8, 2, 3, 3, 6, 6, 0};
		matriz[15] = new Object[] {16, "Jaguares", 7, 8, 1, 3, 4, 5, 11, -6};
		matriz[16] = new Object[] {17, "Huila", 6, 7, 1, 3, 3, 7, 14, -7};
		matriz[17] = new Object[] {18, "Union Magdalena", 5, 7, 1, 4, 2, 4, 9, -5};
		matriz[18] = new Object[] {19, "Equidad", 4, 7, 1, 5, 1, 7, 11, -4};
		matriz[19] = new Object[] {20, "Santa Fe", 2, 8, 0, 6, 2, 1, 10, -9};
	}
 
	public String equipoConMenosPuntos() {
		//Tomamos como referencia el primer registro para poder comparar
		String equipo = (String) matriz[0][1];
		int menosPuntos = (int) matriz[0][2];
		//Buscamos quien tiene menos puntos
		for (int i = 0; i < matriz.length; i++)
			if ((int) matriz[i][2] < menosPuntos) {
				menosPuntos = (int) matriz[i][2];
				equipo = (String) matriz[i][1];
			}
 
		return equipo;
	}
 
	public String equipoMasGolesFavor() {
		String equipo = (String) matriz[0][1];
		int masGoles = (int) matriz[0][7];
 
		for (int i = 0; i < matriz.length; i++)
			if ((int) matriz[i][7] > masGoles) {
				masGoles = (int) matriz[i][7];
				equipo = (String) matriz[i][1];
			}
 
		return equipo;
	}
 
	public int golesTotales() {
		int total = 0;
 
		for (int i = 0; i < matriz.length; i++)
			total += (int)matriz[i][7];
 
		return total;
	}
 
}

Ahora, en otra clase con main, crearemos el JFrame para mostrar la interfaz.
El panel principal podemos dividirlo en dos partes.
En la parte central se mostrará la tabla con los datos de la liga.
La tabla se construye usando la matriz de datos, que al ser de tipo Object, la podemos recuperar directamente tal cual y pasársela a una pequeña clase interna que modelará la tabla.

Debajo, en la parte sur, se mostrarán los tres botones de acción.
Cuando se pulsen estos botones, se mostrará un JOptionPane con el dato estadístico solicitado. El dato estadístico se conseguirá invocando al método correspondiente de la clase que gestiona la matriz de datos.

Esta clase, por tanto, haría las funciones de "Vista" y "Controlador"
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
public class Estadistica extends JFrame{
 
	private MatrizEquipos matriz;
	private TablaStats tabla;
	private JButton bt_MenosPuntos;
	private JButton bt_MasGolesFavor;
	private JButton bt_TotalGoles;
 
	public Estadistica() {
		iniciarComponentes();
		setTitle("Estadísticas Liga Colombiana");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setResizable(false);
		setVisible(true);
	}
 
	private void iniciarComponentes() {
		//Inicializamos matriz con datos
		matriz = new MatrizEquipos();
		//Construimos la tabla
		String[] cabecera = new String[] {"Posición", "Equipo", "Puntos", "PJ", "V",
				"D", "E", "GF", "GC", "DG"};
		tabla = new TablaStats(matriz.getMatriz(), cabecera);
		tabla.setEnabled(false);
		JScrollPane visorTabla = new JScrollPane(tabla);
		visorTabla.setPreferredSize(new Dimension(750, 345));
		/*
		 * Inicializamos los botones.
		 * Usar HTML para el texto de los botones
		 * nos permite hacer salto de linea y centrar el texto
		 */
		bt_MenosPuntos = new JButton("<html><p style=\"text-align:center\">Equipo con<br>menos puntos</p></html>");
		bt_MenosPuntos.addActionListener(new AccionBotonMenosPuntos());
		bt_MasGolesFavor = new JButton("<html><p style=\"text-align:center\">Equipo con mas<br>goles a favor</p></html>");
		bt_MasGolesFavor.addActionListener(new AccionBotonMasGolesFavor());
		bt_TotalGoles = new JButton("<html><p style=\"text-align:center\">Total de goles de<br>todos los equipos</p></html>");
		bt_TotalGoles.addActionListener(new AccionBotonTotalGoles());
		//Construimos panel principal
		JPanel principal = new JPanel();
		principal.setLayout(new BorderLayout());
		//En el centro irá la tabla
		JPanel centro = new JPanel();
		centro.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20),
				BorderFactory.createBevelBorder(BevelBorder.RAISED)));
		centro.add(visorTabla);
		//En el sur, los botones
		JPanel sur = new JPanel();
		sur.setLayout(new FlowLayout(FlowLayout.CENTER, 70, 20));
		sur.add(bt_MenosPuntos);
		sur.add(bt_MasGolesFavor);
		sur.add(bt_TotalGoles);
		//Juntamos paneles
		principal.add(centro, BorderLayout.CENTER);
		principal.add(sur, BorderLayout.SOUTH);
		//Lo seteamos como contenedor del JFrame
		setContentPane(principal);
	}
 
	/*
	 * Clase interna para modelar una tabla básica para los datos
	 */
	private class TablaStats extends JTable {
		public TablaStats(Object[][] datos, String[] nombresColumna) {
			super(new DefaultTableModel(datos, nombresColumna));
		}
	}
 
	/*
	 * Clases internas para las acciones de los botones
	 */
	private class AccionBotonMenosPuntos implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(null, "El equipo con menos puntos es: " + matriz.equipoConMenosPuntos(),
					"Equipo menos puntos", JOptionPane.INFORMATION_MESSAGE);
		}
	}
 
	private class AccionBotonMasGolesFavor implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(null, "El equipo con más goles a favor: " + matriz.equipoMasGolesFavor(),
					"Equipo más goles a favor", JOptionPane.INFORMATION_MESSAGE);
		}
	}
 
	private class AccionBotonTotalGoles implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(null, "Goles marcados por todos los equipos: " + matriz.golesTotales(),
					"Total goles marcados", JOptionPane.INFORMATION_MESSAGE);
		}
	}
 
	public static void main(String[] args) {
 
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Estadistica();
			}
		});
 
	}
 
}

Y con esto creo que ya lo tenemos todo.

tabla-Liga

Pregunta lo que no se entienda. Para más comodidad, adjunto a este mensaje un zip con los dos archivos .java

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 16
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

programa el java con botones

Publicado por Diego (6 intervenciones) el 05/09/2019 20:03:03
Muchisimas gracias que completo que esta la verdad me encanto
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