Java - Ejercicio en JFrame

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

Ejercicio en JFrame

Publicado por Andres (3 intervenciones) el 18/08/2019 18:16:27
muy buenas me podrían ayudar con este ejercicio en netbeans

crear un Jframe donde se digite un numero entero entre 1 y 99 luego se presione un botón y se visualice su respectivo binario



de antemano muchas gracias
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

Ejercicio en JFrame

Publicado por Kabuto (1381 intervenciones) el 18/08/2019 21:52:44
¿Que es lo que te falta por conseguir?
¿El propio JFrame o la conversión a binario?

Comienza a hacerlo y ahí donde te atasques, comparte tu código y consúltanos cuál es tu duda.

No creo que tengas problemas en mostrar un JFrame con un JTextField y un botón, aunque al principio no haga nada. Intenta hacer esto y luego te ayudamos a completarlo.
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: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Ejercicio en JFrame

Publicado por Andres (3 intervenciones) el 19/08/2019 21:08:01
hola perdon por demoraren contestar no andaba en casa es que hasta ahora ando aprendiendo jframe y estoy muy enredado con ese tema tengo la conversion en binario es esta pero no se como colocar el limite de 1 a 99 si es posible que solo me ayudes con eso

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
import java.util.Scanner;
 
/**
 *
 * @author Andres
 */
public class Ejemplof {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Ingrese un número de 1 a 99");
        int numero = scanner.nextInt();
        String binario = "";
        if (numero > 0) {
            while (numero > 0) {
                if (numero % 2 == 0) {
                    binario = "0" + binario;
                } else {
                    binario = "1" + binario;
                }
                numero = (int) numero / 2;
            }
        } else if (numero == 0) {
            binario = "0";
        } else {
            binario = "No se pudo convertir el numero. Ingrese solo números positivos";
        }
        System.out.println("El número convertido a binario es: " + binario);
    }
}
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: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ejercicio en JFrame

Publicado por Kabuto (1381 intervenciones) el 20/08/2019 01:45:00
Vale, a ver, vamos por partes.

Primero, vamos a crear una GUI, muy sencilla pero mínimamente maquetada.
No se si tu estarás aprendiendo con el asistente de NetBeans para crear interfaces. Yo no lo uso, ni sabría muy bien como usarlo la verdad.
Yo escribo todo el código a mano, así que si algo no lo entiendes, pregúntalo y lo explicamos.

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
public class Conversor extends JFrame{
 
	private JTextField jt_decimal;
	private JTextField jt_binario;
	private JButton bt_convertir;
 
	public Conversor() {
 
		JPanel panelPrincipal = new JPanel();
		panelPrincipal.setBorder(BorderFactory.createEmptyBorder(25, 85, 25, 85));
		panelPrincipal.setLayout(new BoxLayout(panelPrincipal, BoxLayout.Y_AXIS));
		panelPrincipal.add(panelDecimal());
		panelPrincipal.add(panelBoton());
		panelPrincipal.add(panelBinario());
 
		setContentPane(panelPrincipal);
 
		setTitle("Conversor a Binario");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setResizable(false);
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	private JPanel panelDecimal() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JLabel("Número Decimal"));
		jt_decimal = new JTextField();
		panel.add(jt_decimal);
		return panel;
	}
 
	private JPanel panelBoton() {
		bt_convertir = new JButton("Convertir");
		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createEmptyBorder(25, 0, 25, 0));
		panel.add(bt_convertir);
		return panel;
	}
 
	private JPanel panelBinario() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JLabel("Número Binario"));
		jt_binario = new JTextField();
		jt_binario.setEditable(false); //Aquí el usuario no puede escribir
		panel.add(jt_binario);
		return panel;
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Conversor();
			}
		});
	}
 
}

Esto nos da una interfaz muy simplona, pero suficiente para poner en práctica el ejercicio:

conversor


Bien, tenemos la interfaz, pero no ahora mismo no tiene ninguna funcionalidad. EL botón no hace nada y en el campo de texto podemos escribir lo que nos de la gana.
Nos interesaría que en el campo de texto solo se puedan teclear números, nada de letras o símbolos.
Y también limitarlo a que solo se puedan teclear dos cifras.

Una opción sería permitir que el usuario escriba lo que quiera y luego al pulsar el botón evaluar lo que hay escrito, y si no es válido, lanzar un mensaje de error al usuario.
Pero podemos programarlo para imponer esos límites al campo de texto, usando un KeyListener y así evaluamos en tiempo real lo que se está tecleando.

Para usar un KeyListener lo que hacemos es crear una clase interna, que podemos llamar EscuchaTeclado, dentro de nuestra clase principal y le pedimos que implemente la interfaz KeyListener.
Al implementar esta interfaz, nos obliga a implementar también 3 métodos. Dentro de estos métodos escribiremos el código que necesitemos.
Un método se encarga de detectar cuando se pulsa una tecla, otro detecta cuando se suelta la tecla y el otro cuando se ha "typeado" algo.

Para este caso, solo nos interesa escribir código cuando se "typea" algo, los otros métodos quedarán vacíos.

Lo que haremos es cuando se escribe algo, lo primero preguntar si nuestro campo de texto ya tiene dos caracteres. En caso afirmativo, rechazaremos el carácter tecleado.

Si aún no tenemos los dos caracteres, entonces si aceptaremos el carácter tecleado, pero solo si es un carácter entre 0 y 9. De lo contrario, también será rechazado.

Una vez creada esta clase, se la añadimos al campo de texto con el método setKeyListener() y pasándole como argumento una instancia de nuestra clase.

Marco en negrita el código que he añadido.

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
public class Conversor extends JFrame{
 
	private JTextField jt_decimal;
	private JTextField jt_binario;
	private JButton bt_convertir;
 
	public Conversor() {
 
		JPanel panelPrincipal = new JPanel();
		panelPrincipal.setBorder(BorderFactory.createEmptyBorder(25, 85, 25, 85));
		panelPrincipal.setLayout(new BoxLayout(panelPrincipal, BoxLayout.Y_AXIS));
		panelPrincipal.add(panelDecimal());
		panelPrincipal.add(panelBoton());
		panelPrincipal.add(panelBinario());
 
		setContentPane(panelPrincipal);
 
		setTitle("Conversor a Binario");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setResizable(false);
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	private JPanel panelDecimal() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JLabel("Número Decimal"));
		jt_decimal = new JTextField();
		jt_decimal.addKeyListener(new EscuchaTeclado()); //Aquí agregamos nuestro KeyListener
		panel.add(jt_decimal);
		return panel;
	}
 
	private JPanel panelBoton() {
		bt_convertir = new JButton("Convertir");
		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createEmptyBorder(25, 0, 25, 0));
		panel.add(bt_convertir);
		return panel;
	}
 
	private JPanel panelBinario() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JLabel("Número Binario"));
		jt_binario = new JTextField();
		jt_binario.setEditable(false); //Aquí el usuario no puede escribir
		panel.add(jt_binario);
		return panel;
	}
 
	private class EscuchaTeclado implements KeyListener {
 
		@Override
		public void keyTyped(KeyEvent e) {
			/*
			 * Primero comprobamos si ya tenemos 2 caracteres
			 * en el campo de texto. Si ya los tenemos, rechazaremos
			 * cualquier cosa que estén tecleando.
			 */
			if (jt_decimal.getText().length() == 2) {
				//Rechazamos lo tecleado
				e.consume();
				//Y hasta hacemos sonar una campanita de aviso
				java.awt.Toolkit.getDefaultToolkit().beep();
			}
			else { //Aún no tenemos 2 caracteres, solo aceptaremos caracters entre 0 y 9
				char caracter = e.getKeyChar();
				if (caracter < '0' || caracter > '9') {
					//No es un caracter entre 0 y 9, rechazamos
					e.consume();
				}
			}
		}
 
		@Override
		public void keyPressed(KeyEvent e) { /*Nada que hacer aquí*/}
 
		@Override
		public void keyReleased(KeyEvent e) { /*Nada que hacer aquí*/}
 
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Conversor();
			}
		});
	}
 
}


Haciéndolo así, el usuario solo podrá teclear valores entre 00 y 99. El programa pide que sea entre 1 y 99. Creo que no vale la pena complicar más el código del KeyListener para lograr esto.
Yo simplemente aceptaría valor 0 como entrada, o en todo caso, hacer que cuando se pulse el botón para convertir, si el valor es cero, lanzar un mensaje de alerta.

Para dar funcionalidad al botón, vamos a hacer algo parecido. Vamos a crear otra clase interna, pero esta vez vamos a implementar la interfaz ActionListener.
Esta interfaz nos obliga a implementar un único método, que será donde le vamos a indicar que ha de coger el valor del campo de texto, convertirlo a un valor entero, pasarlo a binario y mostrarlo en el otro campo de texto.
Luego esta clase, se la añadimos al botón con el método addActionListener() y como argumento una instancia de nuestra clase.

De nuevo, marco en negrita los últimos añadidos al código:

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
public class Conversor extends JFrame{
 
	private JTextField jt_decimal;
	private JTextField jt_binario;
	private JButton bt_convertir;
 
	public Conversor() {
 
		JPanel panelPrincipal = new JPanel();
		panelPrincipal.setBorder(BorderFactory.createEmptyBorder(25, 85, 25, 85));
		panelPrincipal.setLayout(new BoxLayout(panelPrincipal, BoxLayout.Y_AXIS));
		panelPrincipal.add(panelDecimal());
		panelPrincipal.add(panelBoton());
		panelPrincipal.add(panelBinario());
 
		setContentPane(panelPrincipal);
 
		setTitle("Conversor a Binario");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setResizable(false);
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	private JPanel panelDecimal() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JLabel("Número Decimal"));
		jt_decimal = new JTextField();
		jt_decimal.addKeyListener(new EscuchaTeclado()); //Aquí agregamos nuestro KeyListener
		panel.add(jt_decimal);
		return panel;
	}
 
	private JPanel panelBoton() {
		bt_convertir = new JButton("Convertir");
		bt_convertir.addActionListener(new AccionConvertir()); //Aquí agregamos nuestro ActionListener
		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createEmptyBorder(25, 0, 25, 0));
		panel.add(bt_convertir);
		return panel;
	}
 
	private JPanel panelBinario() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		panel.add(new JLabel("Número Binario"));
		jt_binario = new JTextField();
		jt_binario.setEditable(false); //Aquí el usuario no puede escribir
		panel.add(jt_binario);
		return panel;
	}
 
	private class EscuchaTeclado implements KeyListener {
 
		@Override
		public void keyTyped(KeyEvent e) {
			/*
			 * Primero comprobamos si ya tenemos 2 caracteres
			 * en el campo de texto. Si ya los tenemos, rechazaremos
			 * cualquier cosa que estén tecleando.
			 */
			if (jt_decimal.getText().length() == 2) {
				//Rechazamos lo tecleado
				e.consume();
				//Y hasta hacemos sonar una campanita de aviso
				java.awt.Toolkit.getDefaultToolkit().beep();
			}
			else { //Aún no tenemos 2 caracteres, solo aceptaremos caracters entre 0 y 9
				char caracter = e.getKeyChar();
				if (caracter < '0' || caracter > '9') {
					//No es un caracter entre 0 y 9, rechazamos
					e.consume();
				}
			}
		}
 
		@Override
		public void keyPressed(KeyEvent e) { /*Nada que hacer aquí*/}
 
		@Override
		public void keyReleased(KeyEvent e) { /*Nada que hacer aquí*/}
 
	}
 
	private class AccionConvertir implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
 
			String texto = jt_decimal.getText();
			if (texto.isEmpty()) //El campo esta vacío
				JOptionPane.showMessageDialog(null, "El campo de texto no puede estar vacío");
			else {
				int decimal = Integer.parseInt(texto);
				if (decimal == 0) //EL valor es menor que 1
					JOptionPane.showMessageDialog(null, "Teclee un valor entre 1 y 99");
				else {
					String binario = "";
					while (decimal > 0) {
						if (decimal % 2 == 0) {
							binario = "0" + binario;
						} else {
							binario = "1" + binario;
						}
						decimal = (int) decimal / 2;
					}
 
					jt_binario.setText(binario);
				}
			}
		}
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Conversor();
			}
		});
	}
 
}


Y con esto, ya funciona el botón y hace la conversión correctamente.

Adjunto a este mensaje un archivo .zip con el archivo .java por si te va mejor descargarlo que no copiarlo del mensaje.

Pruébalo y pregunta cualquier duda que te surja o lo que no entiendas bien.

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
1
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Ejercicio en JFrame

Publicado por Andres (3 intervenciones) el 21/08/2019 01:46:19
muchísimas gracias te agradezco lo estuve revisando y si me sirvió ademas me sirve bastante tus explicacionwes para aprender jframe aunque no lo veo tan dificil
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