Foro de elhacker.net

Programación => Java => Mensaje iniciado por: winnipu en 18 Mayo 2014, 12:37 pm



Título: swing binario decimal
Publicado por: winnipu en 18 Mayo 2014, 12:37 pm
Hola, vereis he estado desarrollando un programa que convierte un numero binario en decimal y otro decimal en binario. Una vez logrado por consola he intentado mejorarlo con un gui con swing. Pero como no controlo mucho tengo un error que no se donde se produce con el tema de los actionevent imagino. Os pego codigo a ver si alguien me puede echar un cable. Un saludo.
Código:
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class BinDecimal extends JFrame implements ActionListener {



private static final long serialVersionUID = 1L;
private JLabel etiqueta,etiqueta2;
private JTextField texto,texto2,binario,binario2;
private JButton boton,boton2;
public ActionListener metodoBoton;





public BinDecimal(String titulo)
{
super(titulo);
texto=new JTextField(10);
texto2=new JTextField(10);
etiqueta=new JLabel("Escribe en binario para convertir a decimal");
etiqueta2=new JLabel("Escribe en decimal para convertir a binario");
binario=new JTextField("0",10);
binario2=new JTextField("0",10);
binario.setEditable(false);
binario2.setEditable(false);
boton=new JButton("Convertir");
boton2=new JButton("Convertir");
boton.setMnemonic(KeyEvent.VK_C);
boton.setToolTipText("Convertir a decimal");
boton2.setMnemonic(KeyEvent.VK_C);
boton2.setToolTipText("Convertir a binario");
JPanel panel=new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT,4,4));
panel.add(etiqueta);
panel.add(texto);
panel.add(boton);
panel.add(binario);
panel.add(etiqueta2);
panel.add(texto2);
panel.add(boton2);
panel.add(binario2);


getContentPane().add(panel);
boton.addActionListener(this);
boton2.addActionListener(this);

}



public void actionPerformed(ActionEvent evento)
{
int[] array1 = new int[20];
int[] array2 = new int[20];
int i = 0;
int j = 0;
int resultado1 = 0;
int resultado2 = 0;
String cadena, cadena2;


int numero = Integer.parseInt(texto.getText());


do{
array1[i] = numero % 10;
numero /= 10;
resultado1 = array1[i]*(int)Math.pow(2.0, i)+resultado1;
i++;
} while (numero != 0);
cadena = Integer.toString(resultado1);
binario.setText(cadena);

int numero2 = Integer.parseInt(texto2.getText());

do{
array2[j] = numero2 % 2;
numero2 /= 2;
resultado2 = array2[j]*(int)Math.pow(10.0, j)+resultado2;
j++;
} while (numero2 != 0);
cadena2 = Integer.toString(resultado2);
binario2.setText(cadena2);
}



public static void main(String args[])
{
BinDecimal programa=new BinDecimal("Convertir de binario a decimal");
programa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
programa.setSize(600,120);
programa.setLocation(400,450);
programa.setVisible(true);
}
}


Título: Re: swing binario decimal
Publicado por: Zoik en 18 Mayo 2014, 13:46 pm
Hola,

estaría bien que pusieses la trama de error que te da o la línea de código donde te peta.

Un saludo


Título: Re: swing binario decimal
Publicado por: winnipu en 19 Mayo 2014, 18:36 pm
Bueno, ya lo he solventado, tema de colocar dos botones con un condicional.
El codigo seguramente es mejorable, he usado ArrayList, cambiado varios int por long para que los valores convertibles sean mayores y modificado alguna pequeña cosa. Comparto por si a alguno le es de utilidad y aceptaria que alguien repase el codigo por si ve mejoras del tipo que sean. Una cosa que veo mejorable es que cuando intento convertir un numero decimal superior al millon en binario el resultado no me lo da como binario sino como exponencial y no se a que se puede deber.

Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;


public class BinDecimal extends JFrame implements ActionListener {



private static final long serialVersionUID = 1L;
private JLabel etiqueta,etiqueta2;
private JTextField texto,texto2,binario,binario2;
private JButton boton,boton2;
public ActionListener metodoBoton;





public BinDecimal(String titulo)
{
super(titulo);
texto=new JTextField(10);
texto2=new JTextField(10);
etiqueta=new JLabel("Escribe en binario para convertir a decimal");
etiqueta2=new JLabel("Escribe en decimal para convertir a binario");
binario=new JTextField("0",20);
binario2=new JTextField("0",20);
binario.setEditable(false);
binario2.setEditable(false);
boton=new JButton("Convertir");
boton2=new JButton("Convertir");
boton.setMnemonic(KeyEvent.VK_C);
boton.setToolTipText("Convertir a decimal");
boton2.setMnemonic(KeyEvent.VK_C);
boton2.setToolTipText("Convertir a binario");
JPanel panel=new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT,4,4));
panel.add(etiqueta);
panel.add(texto);
panel.add(boton);
panel.add(binario);
panel.add(etiqueta2);
panel.add(texto2);
panel.add(boton2);
panel.add(binario2);
getContentPane().add(panel);
boton.addActionListener(this);
boton2.addActionListener(this);

}



public void actionPerformed(ActionEvent evento)
{
ArrayList<Long> array1 = new ArrayList<Long>();
ArrayList<Long> array2 = new ArrayList<Long>();
int i = 0;
int j = 0;
long resto = 0;
long resultado1 = 0;
long resultado2 = 0;
String cadena, cadena2;

if (evento.getSource()==boton) {
long numero = Long.parseLong(texto.getText());



do{
resto = numero % 10;
array1.add(resto);
numero /= 10;
resultado1 = array1.get(i)*(long)Math.pow(2.0, i)+resultado1;
i++;
} while (numero != 0);

cadena = Long.toString(resultado1);
binario.setText(cadena);
}

if (evento.getSource()==boton2) {
long numero2 = Long.parseLong(texto2.getText());

do{
resto = numero2 % 2;
array2.add(resto);
numero2 /= 2;
resultado2 = array2.get(j)*(long)Math.pow(10.0, j)+resultado2;
j++;
} while (numero2 != 0);

cadena2 = Long.toString(resultado2);
binario2.setText(cadena2);
}
}



public static void main(String args[])
{
BinDecimal programa=new BinDecimal("Conversor Binarios y Decimales");
programa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
programa.setSize(720,120);
programa.setLocation(200,300);
programa.setVisible(true);
}
}