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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: 1 2 [3]
21  Foros Generales / Foro Libre / ¿Por que enseñan esto en Ingenieria Informatica ? en: 1 Agosto 2013, 21:23 pm
Siempre he tenido esa duda, quizas sea a mis 16 años que aun no me de cuenta, pero de curioso, estaba revisando la pagina linkedin de los programadores de videojuegos de grandes empresas (ejemplos, Rockstar, Naughty Dog, DICE, Pyro Studios, etc), muchos estudiaron, investigue sobre los planes de estudios de las universidades que ellos estudiaron y me di cuenta que en los primeros cursos le dan durisimo a esto, vi cosas como "Calculos", "Algebra Lineal", "Fisicas", "Teoria de Grafos", "Calculo Vectorial" y despues de pasar eso, viene las Programaciones, Estructura de Datos, Arquitectura de Computadoras, Inteligencia Artificial, Compiladores, Automatas y Lenguajes Formales, Programacion de Bajo Nivel, etc.

¿ Por que le dan duro con ramos matematicos al principio y no empiezan de inmediato con lo que se debe ?

22  Programación / Java / Problema con un JMenuItem, no escucha evento de mouse (ya Solucionado) en: 21 Julio 2013, 06:28 am
ACTUALIZACION: Ya encontre la solucion, implemente ActionListener

De todas maneras, dejo el codigo de mi error anterior, si alguien me dice si es posible tambien hacerlo por mouse, se los agradeceria.

Mi problema (que ya fue solucinado :D)


Estoy creando un programa que se trata de imitar al Paint, el programa es simple, consta de un Lienzo heredado de JPanel y una Ventana que contiene las herramientas, quize ponerle JMenu dentro de un JMenuBar que los contiene, y cada menu tiene diferentes tipos de JMenuItem, pero el problema es que no me escucha el llamado de mouseClicked, pero curiosamente, si me obedece otros, por ejemplo, le puse una barra inferior que muestra las coordenadas del puntero en el panel y si me hace caso .

Les dejo el codigo de la clase Ventana, ojala puedan ayudarme.

Código
  1. package programa1;
  2.  
  3. import javax.swing.JFrame;
  4. import javax.swing.JMenuBar;
  5. import javax.swing.JMenu;
  6. import javax.swing.JMenuItem;
  7. import javax.swing.JLabel;
  8. import javax.swing.JPanel;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseMotionListener;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.BorderLayout;
  13.  
  14. public class Ventana extends JFrame {
  15.  
  16.    private JMenuBar barraSuperior;
  17.    private JPanel panelInferior;
  18.    private JLabel barraInferior;
  19.  
  20.    private JMenu archivo;
  21.    private JMenu editar;
  22.    private JMenu colores;
  23.    private JMenu formas;
  24.    private JMenu achurado;
  25.    private JMenu ayuda;
  26.  
  27.    private JMenuItem nuevo;
  28.    private JMenuItem salir;
  29.  
  30.    private JMenuItem deshacer;
  31.    private JMenuItem rehacer;
  32.  
  33.    private Lienzo pizarron;
  34.  
  35.    public Ventana(){
  36.  
  37.        super("Paint v2.0");
  38.  
  39.        //Creando el pizarron y las barras
  40.  
  41.        pizarron = new Lienzo();
  42.        barraSuperior = new JMenuBar();
  43.        panelInferior = new JPanel();
  44.        panelInferior.setLayout(new BorderLayout());
  45.        barraInferior = new JLabel("Dibuje en el panel blanco");
  46.        panelInferior.add(barraInferior);
  47.  
  48.        //Creacion de los menus
  49.  
  50.        archivo = new JMenu("Archivo");
  51.        editar = new JMenu("Editar");
  52.        colores = new JMenu("Colores");
  53.        formas = new JMenu("Formas");
  54.        achurado = new JMenu("Achurado");
  55.        ayuda = new JMenu("Ayuda");
  56.  
  57.        //Creacion de los items de cada menu
  58.  
  59.        nuevo = new JMenuItem("Nuevo");
  60.        salir = new JMenuItem("Salir");
  61.        deshacer = new JMenuItem("Deshacer");
  62.        rehacer = new JMenuItem("Rehacer");
  63.  
  64.        //Agregando items a los menus respectivos
  65.  
  66.        archivo.add(nuevo);
  67.        archivo.add(salir);
  68.  
  69.        editar.add(deshacer);
  70.        editar.add(rehacer);
  71.  
  72.        //Construyendo la barra de menus
  73.  
  74.        barraSuperior.add(archivo);
  75.        barraSuperior.add(editar);
  76.        barraSuperior.add(colores);
  77.        barraSuperior.add(formas);
  78.        barraSuperior.add(achurado);
  79.        barraSuperior.add(ayuda);
  80.  
  81.        //Agregando las barras y lienzo.
  82.  
  83.        setJMenuBar(barraSuperior);
  84.        add(pizarron,BorderLayout.CENTER);
  85.        add(panelInferior,BorderLayout.SOUTH);
  86.  
  87.        EventoMouse evento1 = new EventoMouse();
  88.        salir.addMouseListener(evento1);
  89.        pizarron.addMouseListener(evento1);
  90.        pizarron.addMouseMotionListener(evento1);
  91.  
  92.        setSize(500,500);
  93.        setResizable(false);
  94.        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  95.        setVisible(true);
  96.  
  97.    }
  98.  
  99.    private class EventoMouse extends MouseAdapter implements MouseMotionListener {
  100.  
  101.        public void mouseClicked(MouseEvent e){
  102.  
  103.            if(salir.isSelected()){
  104.  
  105.                System.exit(0);
  106.  
  107.            }
  108.  
  109.        }
  110.  
  111.        public void mouseEntered(MouseEvent e){
  112.  
  113.            if(e.getSource().equals(pizarron)){
  114.  
  115.                barraInferior.setText(String.format("%d , %d",e.getX(),e.getY()));
  116.  
  117.            }
  118.  
  119.        }
  120.  
  121.        public void mouseMoved(MouseEvent e){
  122.  
  123.            if(e.getSource().equals(pizarron)){
  124.  
  125.                barraInferior.setText(String.format("%d , %d",e.getX(),e.getY()));
  126.  
  127.            }
  128.        }
  129.  
  130.        public void mouseDragged(MouseEvent e){
  131.  
  132.            if(e.equals(pizarron)){
  133.  
  134.                barraInferior.setText(String.format("%d , %d",e.getX(),e.getY()));
  135.  
  136.            }
  137.        }
  138.  
  139.    }
  140.  
  141.  
  142. }
  143.  
23  Programación / Java / Ayuda, eventos de Teclado no es escuchado en JPANEL en: 5 Mayo 2013, 01:18 am
Voy a crear un videojuego similar al Space Invaders, para eso, quiero que el jugador controle la nave por medio del teclado, la cosa es que el juego consiste en una Ventana (JFrame) y varios niveles que tengo pensado en hacerlo dentro de un JPanel donde es el lugar que se dibuja los enemigos, la nave del heroe, y otros obstaculos como meteoritos, agujeros negros, tormentas solares, etc, intente implementar la interfaz KeyListener en JPanel pero no los escucha, hice lo correcto y registre el evento, pero lo mas curioso es que si me escucha los eventos del Mouse, pero no del Teclado.

Una solucion que encontre fue implementarlo en JFrame y de ahi usar los metodos para mover la nave accediendo a Jpanel y me funciono, pero no es lo que quiero, yo quiero mover la nave implementando KeyListener en JPanel, en otros foros me decian que intente usando el metodo "setFocusable(true)", pero igual no me funciono.

Por ahora, no les mostrare el codigo del juego, pero si de un programa que hice especialmente para mostrar mi duda, es similar a mi problema. Use el compilador Netbeans 7.3

Clase Principal

Código:
package ejercicio47;

import javax.swing.JFrame;

public class Ejercicio47 {

    public static void main(String[] args) {
        
        JFrame ventana = new JFrame();
        Panel panel = new Panel();
        
        ventana.add(panel);
        ventana.setDefaultCloseOperation(Ventana.EXIT_ON_CLOSE);
        ventana.setSize(500,500);
        ventana.setTitle("Testeo de eventos");
        ventana.setFocusable(true);
        ventana.setResizable(false);
        ventana.setVisible(true);

    }
}



Clase Panel

Código:
package ejercicio47;

import javax.swing.JPanel;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.Graphics;
import java.awt.Color;

public class Panel extends JPanel implements KeyListener, MouseListener {
    
    public Panel(){
        
        setBackground(Color.WHITE);
        addMouseListener(this);
        addKeyListener(this);
        
    }
    
    public void mouseClicked(MouseEvent e){
        
        System.out.println("Hola mundo");
        
    }
    
    public void mouseEntered(MouseEvent e){
        
        System.out.println("Hola mundo");
        
    }
    
    public void mousePressed(MouseEvent e){
        
        System.out.println("Hola mundo");
        
    }
    
    public void mouseExited(MouseEvent e){
        
        System.out.println("Adios mundo");
        
    }
    
    public void mouseReleased(MouseEvent e){
        
        System.out.println("Adios mundo");
        
    }
    
    public void keyTyped(KeyEvent e){
        
        System.out.println("Hola mundo");
        
    }
    
    public void keyPressed(KeyEvent e){
        
        System.out.println("Hola mundo");
        
    }
    
    public void keyReleased(KeyEvent e){
        
        System.out.println("Adios mundo");
        
    }
    
    public void paintComponent(Graphics g){
        
        super.paintComponent(g);
        
    }
    
}



24  Programación / Java / Problema en mi videojuego programado en JAVA, usando librerias Swing/AWT en: 12 Marzo 2013, 07:52 am
Para poner en practica mis conocimientos, me anime en crear un pequeño videojuego, que consiste en un Space Invaders, donde las naves alienigenas se mueven horizontalmente (por ahora, despues pienso si moverlo verticalmente, solo es un prototipo), se mueven de tal manera que no se salga de la vista del jugador, cuando toca los bordes de la ventana, cambia de direccion, por ahora solo tiene naves enemigas, pronto le agregare la Nave Heroe (el que el jugador lo controla por teclado) y un contador de puntaje y barras de estado.

Mi juego constate por ahora de 3 clases, la clase principal obviamente con su respectivo main, una clase Panel que consiste en el escenario espacial, donde se mueven las naves enemigas y la nave heroe, y por ultimo la clase Nave, que representan a las naves enemigas.

Bueno, AQUI VA MI GRAN PROBLEMA, quise implementar ActionListener en la clase JPanel y utilizar la clase Timer de (javax.swing.Timer) que llama a actionPerformed para actualizar en un tiempo determinado, para que las naves se muevan con respecto al tiempo, lo cree en el constructor (por si acaso, esto lo aprendi en el libro "Como programar en Java" por Deitel), Y AQUI VIENE LO QUE QUIERO SOLUCIONAR, pues si bien, las naves se mueven a la velocidad que quiero, solamente lo hace en unos instantes, por que hay momentos que las naves "aceleran" mas de lo normal por unas milesimas o centesimas de segundo pero despues vuelve a su velocidad normal, despues vuelve a acelerar y despues vuelve a su velocidad normal y asi sucesivamente, y lo que yo quiero es que ande siempre a la misma velocidad, no se si sera problema de la velocidad de mi computadora o quizas sea algun error que cometi en la codificacion, por eso les pido ayuda, les dejo mi codigo, una captura del juego, el sprite de la nave y el fondo espacial.

Solamente llevo 1 año y 3 meses programando en Java, pero si me ayudan, podre surgir mas rapido :D

NOTA 1: El compilador que use es el Netbeans 7.2

NOTA 2: Si el programa les lanza una excepcion, es por que las imagenes que les acabo de mandar no tiene el mismo nombre a como sale especificado en el programa, o por que quizas no lo guardaron en donde se almacenan las clases (Ya que esta programado para que las imagenes las obtengan en la carpeta donde se guardan las clases)

LA CLASE PRINCIPAL

Código:
package ejercicio267;

import javax.swing.JFrame;

public class Ejercicio267 {

    public static void main(String[] args) {
        
        JFrame ventana = new JFrame("Naves espaciales");
        Panel panel = new Panel();
        
        ventana.add(panel);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.setSize(panel.getWidth(),panel.getHeight());
        ventana.setResizable(false);
        ventana.setVisible(true);
        
    }
}

LA CLASE PANEL

Código:
package ejercicio267;

import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Panel extends JPanel implements ActionListener {
    
    private Image fondoEspacial;
    private Nave naves[] = new Nave[5];
    private int contadorNaves = 0;
    
    /* Constructor del Panel, inicializa su dimension, su fondo espacial y crea
     * las naves
     */
    
    public Panel(){
        
        setSize(500,500);
        fondoEspacial = (new ImageIcon(getClass().getResource("espacio.gif"))).getImage();
        
        naves[0] = new Nave(210,20);
        naves[1] = new Nave(80,75);
        naves[2] = new Nave(420,130);
        contadorNaves += 3;
        
        Timer temporizador = new Timer(1,this);
        temporizador.start();
        
    }
    
    // Metodo llamado por Timer para actualizar y mover las naves
    
    public void actionPerformed(ActionEvent evento){
        
        for(int i=0; i<contadorNaves;i++){
            
            if(naves[i].getCoordenadaX() == getWidth() - 45){
                
                naves[i].setDireccion(-1);
                
            }else{
                
                if(naves[i].getCoordenadaX() == 0){
                    
                    naves[i].setDireccion(-1);
                    
                }
            }
            
            if(naves[i].getDireccion() == 1){
                
                naves[i].setCoordenadaX(1);
                naves[i].setCoordenadaY(0);
                repaint();
                
            }else{
                
                if(naves[i].getDireccion() == -1){
                    
                    naves[i].setCoordenadaX(-1);
                    naves[i].setCoordenadaY(0);
                    repaint();
                    
                }
            }

        }
        
        
    }
    
    // Metodo que actualiza y dibuja en el Panel
    
    public void paintComponent(Graphics g){
        
        super.paintComponent(g);
        
        g.drawImage(fondoEspacial,0,0,getWidth(),getHeight(),this);
        
        for(int i=0; i<contadorNaves; i++){
            
            naves[i].moverNave(g,this);
            
        }
        
    }
    
}

LA CLASE NAVE

Código:
package ejercicio267;

import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.Graphics;

public class Nave {
    
    //Posicion X de la nave en el espacio
    private int coordenadaX;
    
    //Posicion Y de la nave en el espacio
    private int coordenadaY;
    
    //Puntos de salud de la nave    
    private int hpNave;
    
    //Puntos de ataque de la nave
    private int apNave;
    
    //La direccion que se mueve la nave, 1 a la derecha y -1 a la izquierda
    private int direccionNave;
    
    //El respectivo sprite de la nave
    private Image naveSprite;
    
    /* Constructor de la clase, inicializa sus coordenadas de partida, su respec
     * tivo sprite, ademas de su direccion de movimiento
     */  
    public Nave(int coordenadaX, int coordenadaY){
        
        this.coordenadaX = coordenadaX;
        this.coordenadaY = coordenadaY;
        naveSprite = (new ImageIcon(getClass().getResource("nave.png"))).getImage();
        direccionNave = 1;
        
    }
    
    // Metodo que establece una nueva coordenada X
    public void setCoordenadaX(int coordenadaX){
        
        this.coordenadaX += coordenadaX;
        
    }
    
    // Metodo que establece una nueva coordenada Y  
    public void setCoordenadaY(int coordenadaY){
        
        this.coordenadaY += coordenadaY;
        
    }
    
    // Metodo que obtiene la coordenada X
    public int getCoordenadaX(){
        
        return coordenadaX;
        
    }
    
    // Metodo que obtiene la coordenada Y
    public int getCoordenadaY(){
        
        return coordenadaY;
        
    }
    
    // Metodo que establece una nueva direccion de movimiento de la nave
    public void setDireccion(int dir){
        
        direccionNave = direccionNave * dir;
        
    }
    
    // Metodo que obtiene la direccion de la nave
    public int getDireccion(){
        
        return direccionNave;
        
    }
    
    // Metodo que dibuja la nave con su nueva posicion en el panel
    public void moverNave(Graphics g, Panel panel){
        
        g.drawImage(naveSprite,coordenadaX,coordenadaY,45,45,panel);
        
    }
    
}







25  Programación / Java / Necesito ayuda con eventos del Mouse (dibujar lineas) URGENTE en: 23 Febrero 2013, 04:53 am
Mi programa es sencillo, es aprovechar de usar las librerias Swing y AWT para crear un pizarrón que dibuje solamente lineas, se me ocurrio crear una clase que extienda a JPanel con color blanco, le puse una barra de estado en la parte inferior del panel para que vaya indicando la posición del puntero, ademas, a JPanel le agregue eventos del mouse, de tal manera que se implementara mouseMoved para que indique la coordenada del puntero al moverse, tambien el mouseDragged con la intencion de que la linea se alargara mientras la estiro con el mouse, es ahi el gran problema, yo quiero que mi programa se vea como la linea se estira cuando se este moviendo el Mouse con el boton presionado y al momento de soltar el boton que quede dibujado en la pizarra, pero no me funciona, lo unico que hace es que la linea se muestra una vez que se solto el boton y yo quiero que en todo momento se vea como se alarga, pondre unas capturas y el codigo, ojala me puedan ayudar, he investigado en muchas partes pero no encuentro la solucion.

LA CLASE PRINCIPAL

Código:
package ejercicio210;

import javax.swing.JFrame;

public class Ejercicio210 {

    public static void main(String[] args) {
       
        JFrame ventana = new JFrame("Panel de dibujo");
        Panel panel = new Panel();
       
        ventana.add(panel);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.setSize(300,300);
        ventana.setResizable(false);
        ventana.setVisible(true);
       
    }
}


LA CLASE PANEL(LA PIZARRA)

Código:
package ejercicio210;

import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Graphics;

public class Panel extends JPanel {
   
    private JLabel etiquetaInferior;
    private JPanel panelInferior;
    private Linea linea;
    private Linea lineasDibujadas[] = new Linea[100];
    private int contadorLineas = 0;
   
    public Panel(){
       
        setLayout(new BorderLayout());
        setBackground(Color.WHITE);
       
        panelInferior = new JPanel();
        etiquetaInferior = new JLabel("Puntero fuera del panel");
        panelInferior.setLayout(new BorderLayout());
        panelInferior.add(etiquetaInferior,BorderLayout.WEST);
        add(panelInferior,BorderLayout.SOUTH);
        addMouseListener(new EventoMouse());
        addMouseMotionListener(new EventoMouse());
       
    }
   
    private class EventoMouse extends MouseAdapter implements MouseMotionListener {
       
        public void mousePressed(MouseEvent evento){
           
            linea = new Linea(evento.getX(),evento.getY(),evento.getX(),evento.getY());
            repaint();
           
        }
       
        public void mouseDragged(MouseEvent evento){
           
            linea.setFinalX(evento.getX());
            linea.setFinalY(evento.getY());
            etiquetaInferior.setText(String.format("%d,%d",evento.getX(),evento.getY()));
            repaint();
           
        }
       
        public void mouseReleased(MouseEvent evento){
           
            lineasDibujadas[contadorLineas] = linea;
            contadorLineas++;
            repaint();
           
        }
       
        public void mouseMoved(MouseEvent evento){
           
            etiquetaInferior.setText(String.format("%d,%d",evento.getX(),evento.getY()));

        }
       
    }
   
    public void paintComponent(Graphics g){
       
        super.paintComponent(g);
       
        for(int i=0; i<contadorLineas; i++){
           
            lineasDibujadas[i].dibujar(g);
           
        }
       
 

       
    }
   
   
}

LA CLASE LINEA

Código:
package ejercicio210;

import java.awt.Graphics;

public class Linea {
   
    private int origenX;
    private int origenY;
    private int finalX;
    private int finalY;
   
    public Linea(int origenX, int origenY, int finalX, int finalY){
       
        this.origenX = origenX;
        this.origenY = origenY;
        this.finalX = finalX;
        this.finalY = finalY;
       
    }
   
    public void setFinalX(int finalX){
       
        this.finalX = finalX;
       
    }
   
    public void setFinalY(int finalY){
       
        this.finalY = finalY;
       
    }
   
    public void dibujar(Graphics g){
       
        g.drawLine(origenX,origenY,finalX,finalY);
       
    }
   
}





26  Programación / Java / 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
27  Programación / Java / Necesito ayuda para mi Calculadora (usando la libreria Swing) en: 31 Enero 2013, 09:24 am
Me anime a programar una calculadora sencilla, se trata de 2 campos de textos donde se ingresa el numero, abajo hay 5 botones, hay para sumar, restar, multiplicar y dividir, mas un boton adicional para borrar todo, los resultados de las operaciones se muestra en un campo inmodificable, pero mi problema es que para que pueda guardar los numeros a operar, hay que apretar el boton Enter  y lo que yo busco es que cuando el usuario escribe el numero en los campos, no tenga que acudir al enter, solo es llegar y escribir los numeros y clickear el boton de la operacion deseada.

Yo estoy leyendo el libro de Deitel 7ma edicion si es que alguien lo leyo para que me pueda ayudar y les dejo mi codigo, yo programé una clase que se llama Calculadora y que hereda todo de JFrame. Por si acaso, estoy usando el Netbeans 7.2


Les dejo la clase calculadora


package ejercicio109;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Calculadora extends JFrame {
   
    private JLabel etiqueta1;
    private JLabel etiqueta2;
    private JLabel etiqueta3;
   
    private JTextField campo1;
    private JTextField campo2;
    private JTextField campo3;
   
    private JButton botonSuma;
    private JButton botonResta;
    private JButton botonProducto;
    private JButton botonDivision;
    private JButton botonBorrar;
   
    private int numero1;
    private int numero2;
    private int resultado;
   
    public Calculadora(){
       
        super("CALCULADORA SIMPLE");
        setLayout(new FlowLayout());
       
        etiqueta1 = new JLabel("Numero 1");
        etiqueta2 = new JLabel("Numero 2");
        etiqueta3 = new JLabel("Resultado");
       
        campo1 = new JTextField(10);
        campo2 = new JTextField(10);
        campo3 = new JTextField(10);
        campo3.setEditable(false);
       
        botonSuma = new JButton("Sumar");
        botonResta = new JButton("Restar");
        botonProducto = new JButton("Multiplicar");
        botonDivision = new JButton("Dividir");
        botonBorrar = new JButton("Borrar");
       
        add(etiqueta1);
        add(campo1);
       
        add(etiqueta2);
        add(campo2);
       
        add(etiqueta3);
        add(campo3);
       
        add(botonSuma);
        add(botonResta);
        add(botonProducto);
        add(botonDivision);
        add(botonBorrar);
       
        numero1 = 0;
        numero2 = 0;
       
        AdministradorEventos administrador = new AdministradorEventos();
       
        campo1.addActionListener(administrador);
        campo2.addActionListener(administrador);
       
        botonSuma.addActionListener(administrador);
        botonResta.addActionListener(administrador);
        botonProducto.addActionListener(administrador);
        botonDivision.addActionListener(administrador);
        botonBorrar.addActionListener(administrador);

    }
   
    private class AdministradorEventos implements ActionListener {
       
        public void actionPerformed(ActionEvent evento){
           
            if(evento.getSource() == campo1){
               
                numero1 = Integer.parseInt(evento.getActionCommand());
               
            }
           
            if(evento.getSource() == campo2){
               
                numero2 = Integer.parseInt(evento.getActionCommand());
               
            }
           
            if(evento.getSource() == botonSuma){
               
                resultado = numero1 + numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonResta){
               
                resultado = numero1 - numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonProducto){
               
                resultado = numero1 * numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonDivision){
               
                resultado = numero1 / numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonBorrar){
               
                numero1 = 0;
                numero2 = 0;
                resultado = 0;
               
                campo1.setText("");
                campo2.setText("");
                campo3.setText("");
               
            }
           
        }
       
    }
   
   
}


Y ahora les dejo el programa principal

package ejercicio109;

public class Ejercicio109 {

    public static void main(String[] args) {
       
        Calculadora calculadora = new Calculadora();
       
        calculadora.setSize(600,100);
        calculadora.setResizable(false);
        calculadora.setDefaultCloseOperation(Calculadora.EXIT_ON_CLOSE);
        calculadora.setVisible(true);
       
    }
}


28  Programación / Java / Tengo una duda con la recolección de basura (Garbage Collector) en: 18 Enero 2013, 04:30 am
Investigando por ahi, me di cuenta que Java elimina automaticamente variables primitivas (como int, long, float, etc) y de referencia, pero tambien me di cuenta que System tiene un metodo que ejecuta el recolector de basura, teniendo en cuenta eso, quise hacer un pequeño programa para ponerlo a prueba, se trata de una clase que se llama Empleado que guarda la información de un empleado, ademas de una variable static para ir contando los empleados que tiene la compañia, la cosa es que creo 2 empleados e imprimo los datos por pantalla, ademas de la cantidad de empleados y me salen que son 2, pero cuando al segundo empleado lo convierto en null y llamo al recolector de basura, no me lo borra de la memoria, y sigue marcando como 2 empleados en la compañia en vez de 1, ¿alguien sabe a que se debe esto?, ¿ que no se suponia que el recolector borra de la memoria las variables que son "inutiles"?

Les dejo el codigo

//Clase Empleado

package ejercicio83;

public class Empleado {
    
    private String nombre;
    private String rut;
    private int edad;
    private int sueldo;
    private static int cantEmpleados = 0;
    
    public Empleado(String nombre, String rut, int edad, int sueldo){
        
        this.nombre = nombre;
        this.rut = rut;
        this.edad = edad;
        this.sueldo = sueldo;
        this.cantEmpleados++;
        
    }
    
    public String getNombre(){
        
        return nombre;
        
    }
    
    public String getRut(){
        
        return rut;
        
    }
    
    public int getEdad(){
        
        return edad;
        
    }
    
    public int getSueldo(){
        
        return sueldo;
        
    }
    
    public static int getContratados(){
        
        return cantEmpleados;
        
    }
    
}


//Main

package ejercicio83;

public class Ejercicio83 {

    public static void main(String[] args) {
       
        Empleado empleado1 = new Empleado("Juan", "1234", 22 , 350000);
        Empleado empleado2 = new Empleado("Carlos", "5678", 30, 1200000);
       
        System.out.printf("\n\nNombre: %s\nRut: %s\nEdad: %d\nSueldo: %d", empleado1.getNombre(), empleado1.getRut(), empleado1.getEdad(), empleado1.getSueldo());
        System.out.printf("\n\nNombre: %s\nRut: %s\nEdad: %d\nSueldo: %d", empleado2.getNombre(), empleado2.getRut(), empleado2.getEdad(), empleado2.getSueldo());
       
        empleado2 = null;
        System.gc();
        System.out.printf("\n\n%d empleados\n", Empleado.getContratados());
       
    }
}

29  Programación / Java / Tengo un problema (convertidor a binario) en: 2 Septiembre 2012, 01:42 am
ESPEREN, NO LEAN TODAVIA EL CODIGO, TENGO UNOS ERRORES EPICOS PERO LO CORREGI, DESPUES SE LOS MANDO CORREGIDO PARA QUE AYUDEN EN MI PROBLEMA !!!!!!!!!



Quiero programar un conversor de numero decimal a binario de los 30 primeros numeros, a mi se me ocurrio con un String ir amontonando los restos al dividir por 2 (transformados en string eso si), pero me da un error en tiempo de ejecucion, aqui les dejo los errores y el codigo, ojala me puedan ayudar, cualquier sugerencia sera bienvenida ;), no se rian si encuentran algo ridiculo, tengo 15 y soy novato


El error que me sale es:

java.lang.NumberFormatException: For input string: ""
   at java.lang.NumberFormatException.forInputString(Unknown Source)
   at java.lang.Integer.parseInt(Unknown Source)
   at java.lang.Integer.parseInt(Unknown Source)
   at ejercicio10.calcularBinario(ejercicio10.java:25)
   at ejercicio10.main(ejercicio10.java:33)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

public class ejercicio10{
  
  public static int calcularBinario(int numero){
    
    String binario = "";
    int bin;
    boolean flag = true;
    int resto;
    int div;
    
    
    while(flag){
      
      div = numero/2;
      
      if(div != 0){
        numero = div;
        resto = numero%2;
        binario += Integer.toString(resto); //Para ir juntando los 0 o 1, concatenando
      }else{
        flag = false;
      }            
    }
    
    bin = Integer.parseInt(binario);
    
    return bin;
  }
  
  public static void main(String[]Args){
    
    for(int i=0; i<30; i++){
      int binario = calcularBinario(i);
      System.out.println(binario);
    }
    
  }
  
}
  
  
Páginas: 1 2 [3]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines