elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con Eventos y libreria Swing
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Eventos y libreria Swing  (Leído 3,052 veces)
DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Ayuda con Eventos y libreria Swing
« en: 5 Febrero 2013, 01:33 am »

Hola, necesito ayuda con eventos, para ejercitar lo aprendido, me decidí programar un conversor de numeros, es decir, el usuario escribe un numero en el campo, despues selecciona en un boton de radio si quiere convertirlo a binario o hexadecimal, si no lo escogio arrojará un mensaje de que seleccione el tipo de numero a convertir, pero el problema que me da es cuando el usuario apreta el boton "Calcular" sin que haya un numero en el campo y se me cae el programa, pese a que programe a que el sistema desplegara un mensaje cuando no ingreso un numero, pero no me hace caso

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


En línea

Slider324

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: Ayuda con Eventos y libreria Swing
« Respuesta #1 en: 5 Febrero 2013, 13:52 pm »

ok te dire el error y la solucion lineas 109 y 141:

Código:
if(campo1.getText() == null)

cambialo por:

Código:
if(campo1.getText().toString().length() == 0)

para que entiendas un poco mas tu problema intenta con un system.out.println imprimir:

Código:
campo1.getText()

saludos y suerte


En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Ayuda con Eventos y libreria Swing
« Respuesta #2 en: 5 Febrero 2013, 17:26 pm »

Buenas!!

También podrías controlar que solo acepte números.

He modificado algunas cosillas para acortar el código y que solo convierta números. No sé mucho de Java, pero es un buen ejemplo para practicar:

Clase Convertidor
Código
  1. import java.awt.FlowLayout;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.ItemEvent;
  5. import java.awt.event.ItemListener;
  6. import javax.swing.ButtonGroup;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;
  10. import javax.swing.JOptionPane;
  11. import javax.swing.JRadioButton;
  12. import javax.swing.JTextField;
  13.  
  14. public class Convertidor extends JFrame {
  15.    //Declaracion de variables
  16.    private static final long serialVersionUID = 1L;
  17.    private JLabel etiqueta1;
  18.    private JLabel etiqueta2;
  19.    private JTextField campo1;
  20.    private JTextField campo2;
  21.    private JButton botonCalcular;
  22.    private JRadioButton botonBinario;
  23.    private JRadioButton botonHexadecimal;
  24.    private ButtonGroup grupoBotones;
  25.    private boolean esBinario;
  26.    private boolean esHexadecimal;
  27.    private int numeroDecimal;
  28.  
  29.    public Convertidor() {
  30.        super("Convertidor");
  31.        setLayout(new FlowLayout());
  32.  
  33.        //Se crean las etiquetas
  34.        etiqueta1 = new JLabel("Numero a convertir");
  35.        etiqueta2 = new JLabel("Numero convertido ");
  36.  
  37.        //Se crean los campos, el primero para ingresar y el otro para imprimir
  38.        campo1 = new JTextField(10);
  39.        campo2 = new JTextField(10);
  40.        campo2.setEditable(false);
  41.  
  42.        //Se crean los botones de Radio y uno normal
  43.        botonCalcular = new JButton("Calcular");
  44.        botonBinario = new JRadioButton("Binario");
  45.        botonHexadecimal = new JRadioButton("Hexadecimal");
  46.  
  47.        //Se crean booleanos necesarios para determinar el tipo de numero a convertir
  48.        esBinario = false;
  49.        esHexadecimal = false;
  50.        numeroDecimal = 0;
  51.  
  52.        //Se crea el grupo de botones de radio y se agregan los botones radio a
  53.        //dicho grupo
  54.        grupoBotones = new ButtonGroup();
  55.        grupoBotones.add(botonCalcular);
  56.        grupoBotones.add(botonBinario);
  57.        grupoBotones.add(botonHexadecimal);
  58.  
  59.  
  60.        //Se agregan las etiquetas, campos y botones a la ventana
  61.        add(etiqueta1);
  62.        add(campo1);
  63.  
  64.        add(etiqueta2);
  65.        add(campo2);
  66.  
  67.        add(botonBinario);
  68.        add(botonHexadecimal);
  69.        add(botonCalcular);
  70.  
  71.        //Se crea instancia AdministradorEventos para controlar los eventos
  72.        AdministradorEventos administrador = new AdministradorEventos();
  73.  
  74.        //Se le agregan eventos a los botones a utilizar
  75.        botonBinario.addItemListener(administrador);
  76.        botonHexadecimal.addItemListener(administrador);
  77.        botonCalcular.addActionListener(administrador);
  78.    }
  79.  
  80.    private class AdministradorEventos implements ActionListener, ItemListener {
  81.  
  82.        /**
  83.          * Metodo que permite calcular el numero numero decimal a binario, hexade
  84.          * cimal o viceversa, segun lo que se haya seleccionado en los botones
  85.          * de radio
  86.          */
  87.        public void actionPerformed(ActionEvent evento) {
  88.         String resultado = "";
  89.            if(campo1.getText().equals("")) {
  90.                JOptionPane.showMessageDialog(null, "No ha ingresado ningun numero", "ERROR", 0);
  91.            } else {
  92.             try {
  93.             numeroDecimal = Integer.parseInt(campo1.getText());
  94.                } catch(Exception e) {
  95.                 JOptionPane.showMessageDialog(null, "Solo números, por favor", "ERROR", 0);
  96.                 numeroDecimal = 0;
  97.                }
  98.             if(esBinario) {
  99.             while(numeroDecimal != 0) {
  100.             resultado += numeroDecimal % 2; //Se concatena
  101.             numeroDecimal /= 2;
  102.             }
  103.             char arregloChar[] = resultado.toCharArray();
  104.             resultado = "";
  105.             for(int i = 0; i < arregloChar.length; i++) {
  106.             resultado += arregloChar[(arregloChar.length-1)-i];
  107.             }
  108.                    campo2.setText(resultado);
  109.             } else if(esHexadecimal) {
  110.                    int resto = 0;
  111.                    while(numeroDecimal != 0) {
  112.                        resto = numeroDecimal % 16;
  113.                        switch(resto) {
  114.                            case 10:
  115.                             resultado += "A";
  116.                                break;
  117.                            case 11:
  118.                             resultado += "B";
  119.                                break;
  120.                            case 12:
  121.                             resultado += "C";
  122.                                break;
  123.                            case 13:
  124.                             resultado += "D";
  125.                                break;
  126.                            case 14:
  127.                             resultado += "E";
  128.                                break;
  129.                            case 15:
  130.                             resultado += "F";
  131.                                break;
  132.                            default:
  133.                             resultado += resto;
  134.                                break;
  135.                        }//Fin del Switch
  136.                        numeroDecimal = numeroDecimal / 16;
  137.                        System.out.println(numeroDecimal);
  138.                    }//Fin del ciclo While
  139.                    char arregloChar[] = resultado.toCharArray();
  140.                    resultado = "";
  141.                    for(int i = 0; i < arregloChar.length; i++) {
  142.                     resultado += arregloChar[(arregloChar.length-1)-i];
  143.                    }
  144.                    campo2.setText(resultado);
  145.             } else {
  146.             JOptionPane.showMessageDialog(null,"Seleccione el tipo de numero a convertir","Error", 0);
  147.             }
  148.            }
  149.        }
  150.  
  151.        /**
  152.          * Metodo que permite seleccionar el tipo de numero a convertir
  153.          */
  154.        public void itemStateChanged(ItemEvent evento) {
  155.            if(botonBinario.isSelected()) {
  156.                esBinario = true;
  157.                esHexadecimal = false;
  158.            } else if(botonHexadecimal.isSelected()) {
  159.                esBinario = false;
  160.                esHexadecimal = true;
  161.            }
  162.        }
  163.    }
  164. }
  165.  

Saludos
En línea

Breakbeat como forma de vida
DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Re: Ayuda con Eventos y libreria Swing
« Respuesta #3 en: 5 Febrero 2013, 20:52 pm »

Gracias por sus ayudas, me sirvió, ahora el programa funciona sin problemas, y acerca del manejo de las excepciones, lo tendré en cuenta para que mis programas sean mas robustos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con swing en java
Java
boolean 2 2,953 Último mensaje 10 Diciembre 2006, 22:06 pm
por Casidiablo
Ayuda con eventos del mouse!!!
Programación C/C++
delirio 0 1,901 Último mensaje 27 Junio 2011, 11:13 am
por delirio
ayuda con software swing pilas
Java
jimytron 0 2,223 Último mensaje 30 Abril 2012, 18:58 pm
por jimytron
Necesito ayuda para mi Calculadora (usando la libreria Swing)
Java
DarkSorcerer 3 9,006 Último mensaje 2 Febrero 2013, 02:04 am
por DarkSorcerer
Ayuda Jave Netbeans swing
Programación General
Ajikan23 0 2,572 Último mensaje 17 Abril 2013, 04:14 am
por Ajikan23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines