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