Les dejo mi codigo y algunas imagenes, ojala me puedan ayudar ya que soy nuevo en esto, por el momento me calcula bien a binario y hexadecimal por que lo comprobe, pero el problema es cuando ejecuto el boton Calcular sin que haya numero y deberia avisar por mensaje de que se debe ingresar un numero
Cualquier recomendacion o correccion de algun errores que haya cometido, bienvenido sean, o si hay una forma mas corta, tambien, asi ganamos todos en este tema xD
Clase Convertidor
[/b]Código:
package ejercicio117;
//Se importa las las clases necesarias para el convertidor
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JOptionPane;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
public class Convertidor extends JFrame {
//Declaracion de variables
private JLabel etiqueta1;
private JLabel etiqueta2;
private JTextField campo1;
private JTextField campo2;
private JButton botonCalcular;
private JRadioButton botonBinario;
private JRadioButton botonHexadecimal;
private ButtonGroup grupoBotones;
private boolean esBinario;
private boolean esHexadecimal;
private int numeroDecimal;
public Convertidor(){
super("Convertidor");
setLayout(new FlowLayout());
//Se crean las etiquetas
etiqueta1 = new JLabel("Numero a convertir");
etiqueta2 = new JLabel("Numero convertido ");
//Se crean los campos, el primero para ingresar y el otro para imprimir
campo1 = new JTextField(10);
campo2 = new JTextField(10);
campo2.setEditable(false);
//Se crean los botones de Radio y uno normal
botonCalcular = new JButton("Calcular");
botonBinario = new JRadioButton("Binario");
botonHexadecimal = new JRadioButton("Hexadecimal");
//Se crean booleanos necesarios para determinar el tipo de numero a convertir
esBinario = false;
esHexadecimal = false;
numeroDecimal = 0;
//Se crea el grupo de botones de radio y se agregan los botones radio a
//dicho grupo
grupoBotones = new ButtonGroup();
grupoBotones.add(botonCalcular);
grupoBotones.add(botonBinario);
grupoBotones.add(botonHexadecimal);
//Se agregan las etiquetas, campos y botones a la ventana
add(etiqueta1);
add(campo1);
add(etiqueta2);
add(campo2);
add(botonBinario);
add(botonHexadecimal);
add(botonCalcular);
//Se crea instancia AdministradorEventos para controlar los eventos
AdministradorEventos administrador = new AdministradorEventos();
//Se le agregan eventos a los botones a utilizar
botonBinario.addItemListener(administrador);
botonHexadecimal.addItemListener(administrador);
botonCalcular.addActionListener(administrador);
}
private class AdministradorEventos implements ActionListener, ItemListener {
/**
*
* Metodo que permite calcular el numero numero decimal a binario, hexade
* cimal o viceversa, segun lo que se haya seleccionado en los botones
* de radio
*
*/
public void actionPerformed(ActionEvent evento){
if(esBinario){
if(campo1.getText() == null){
JOptionPane.showMessageDialog(null, "No ha ingresado ningun numero", "ERROR", 0);
}else{
numeroDecimal = Integer.parseInt(campo1.getText());
String binario = "";
while(numeroDecimal != 0){
binario += numeroDecimal%2; //Se concatena
numeroDecimal = numeroDecimal / 2;
}
char arregloChar[] = binario.toCharArray();
binario = "";
for(int i=0; i<arregloChar.length; i++){
binario += arregloChar[(arregloChar.length-1)-i];
}
campo2.setText(binario);
}
}else{
if(esHexadecimal){
if(campo1.getText() == null){
JOptionPane.showMessageDialog(null, "No ha ingresado ningun numero", "ERROR", 0);
}else{
numeroDecimal = Integer.parseInt(campo1.getText());
String hexadecimal = "";
int resto = 0;
while(numeroDecimal != 0){
resto = numeroDecimal % 16;
switch(resto){
case 10:
hexadecimal += "A";
break;
case 11:
hexadecimal += "B";
break;
case 12:
hexadecimal += "C";
break;
case 13:
hexadecimal += "D";
break;
case 14:
hexadecimal += "E";
break;
case 15:
hexadecimal += "F";
break;
default:
hexadecimal += resto;
break;
}//Fin del Switch
numeroDecimal = numeroDecimal / 16;
System.out.println(numeroDecimal);
}//Fin del ciclo While
char arregloChar[] = hexadecimal.toCharArray();
hexadecimal = "";
for(int i=0; i<arregloChar.length; i++){
hexadecimal += arregloChar[(arregloChar.length-1)-i];
}
campo2.setText(hexadecimal);
}
}else{
JOptionPane.showMessageDialog(null,"Seleccione el tipo de numero a convertir","Error", 0);
}
}
}
/**
* Metodo que permite seleccionar el tipo de numero a convertir
*/
public void itemStateChanged(ItemEvent evento){
if(botonBinario.isSelected()){
esBinario = true;
esHexadecimal = false;
}
if(botonHexadecimal.isSelected()){
esBinario = false;
esHexadecimal = true;
}
}
}
}
Programa principal
[/b]Código:
package ejercicio117;
public class Ejercicio117 {
public static void main(String[] args) {
Convertidor convertidor = new Convertidor();
convertidor.setSize(250,150);
convertidor.setDefaultCloseOperation(Convertidor.EXIT_ON_CLOSE);
convertidor.setResizable(false);
convertidor.setVisible(true);
}
}
Esta es la vista normal del programa
Este error ocurre cuando se hace Click en calcular sin haber elegido el tipo de numero a convertir
Este error se produce cuando no hay un numero en el campo una vez que se selecciono el tipo de numero a convertir, yo esperaba que lanzara el mensaje que diga al usuario ingresar un numero