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();
}
});
}
}