Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

martes, 8 de septiembre de 2020

Nociones Básicas de lenguaje de programación JAVA

Estructura Básica de JAVA

Java es un lenguaje muy funcional, fue diseñado para ser parecido a C++, concretamente para facilitar un rápido y fácil aprendizaje para un gran número de programadores.

Java elimina muchas de las características de C++, para mantener la simplicidad del lenguaje añade caracteristicas muy útiles como el "garbage collector"(reciclador de memoria dinámica o recolector automático de basura).

No es necesario preocuparse de liberar memoria, el recolector de basura se encarga de ello. Como es una aplicación que se ejecuta "en segundo plano" (programa que se ejecuta en memoria de forma concurrente a otras a otroas aplicaciones) y es de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grande, lo que mejora la gestión de la memoria.

martes, 4 de junio de 2019

Busqueda de datos en un ArrayList

Codigo ejemplo interesante para realizar busqueda de datos dentro de un ArrayList:

       if (!listaTenistas.isEmpty()) {
          int i = 0;
          Tenista t = null;
          boolean encontrado = false;
          while (!encontrado && i < listaTenistas.size()) {
             t = listaTenistas.get(i);
             if (t.getNombre().equalsIgnoreCase(jtNombreBuscar.getText())) {
                encontrado = true;
             } else {
                i++;
             }
          }
          if (encontrado) {
             indice = i;
             mostrarDatosTenista(indice);
          } else {
             JOptionPane.showMessageDialog(this, "El tenista " + jtNombreBuscar.getText() + " no ha sido encontrado", "No encontrado", JOptionPane.ERROR_MESSAGE);
          }

       } else {
          JOptionPane.showMessageDialog(this, "No se han añadido tenistas a la lista", "Lista vacía", JOptionPane.ERROR_MESSAGE);
       }


listaTenista es el ArrayList, de la clase Tenista, en la que se crea un metodo privado que devuelve el nombre escrito en el campo de texto jtNombreBuscar. metodo llamado getNombre().

miércoles, 2 de octubre de 2013

referencias estáticas

Dentro de los métodos estáticos de una clase no podemos acceder a variables o métodos que no lo sean.

Variable de instancia a y método también de instancia unMetodo.

package libro;

public final class TestEstatico {

  private int a = 0;
  public void unMetodo() {
   System.out.println("este es unMetodo().");
 }
 
 public static void main(String[] args) {
  System.out.println("a vale " + a);
  t.unMetodo();
 }
}

Nos mostrara el siguiente error:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
 Cannot make a static reference to the non-static field a

  at libro.TestEstatico.main(TestEstatico.java:14)

Lo correcto es definir la variable a y metodo unMetodo como estáticos:

private static int a = 0;

La otra opción será crear dentro del método main una instancia de la clase y acceder a la variable y al método a través de esta, como veremos a continuación.

package libro;

public final class TestEstatico {

  private int a = 0;
  public void unMetodo() {
   System.out.println("este es unMetodo().");
  }
 
  public static void main(String[] args) {

   TestEstatico t = new TestEstatico();
   System.out.println("a vale " + t.a);
   t.unMetodo();
  }
}

martes, 17 de septiembre de 2013

El constructor

El constructor de una clase es un método "especial" de la que podremos crear objetos de la clase.

Todas la clases tienen al menos un constructor, aun que podemos crear nosotros uno adaptado a nuestro proyecto antes de aceptar el constructor por defecto que java define por nosotros.

Objeto creado a través del constructor por defecto:

Coche c = new Coche();

Lo que hace esta linea es definir y crear un objeto c utilizando el constructor Coche(). El operador new tiene como argumento el constructor de la clase, Coche(), se puede decir que este constructor esta definido por defecto.

Para crear objetos de la clase Coche pasaremos los valores de cv, numero de puertas y tipo a través del constructor. Así evitaremos la necesidad de invocar a los métodos setters.

Agregamos en la clase Coche un constructor que reciba los atributos que no interesa.
package coche;
public class Coche {
   private int cv;
   private int numeroPuertas;
   private String tipo;

//constructor
   public Coche(int c, int numPuer, String t ){
      cv = power;
      numPuer = numeroPuertas;
      t = tipo;
   }

//setters y getters ....
}

lunes, 16 de septiembre de 2013

Comparación de cadenas

En el lenguaje Java(al igual que en C) no existe un tipo de datos primitivo para representar cadenas de caracteres.

Las cadenas se representan como objetos de la clase String. Ahora bien, la clase String tiene tanta funcionalidad y tantos privilegios que se le puede tratar como si fuese un tipo de dato primitivo.

 Informalmente diremos que “un objeto es una variable cuyo tipo de datos es una clase”. Así, para un String esto seria:

 String s = “hola mundo !!.”; 

s resulta ser un objeto (una variable) cuyo tipo de datos es String. Es decir:

Un objeto de la clase String o una instancia de esta clase. Los objetos son en realidad referencias(punteros) que indican la dirección física de memoria en donde reside la información que contienen. Por este motivo no podemos utilizar el operador de comparación == (igual igual) para comparar objetos, lo que estamos comparando realmente son direcciones de memoria, no contenidos.

Como las cadenas son objetos, comparar cadenas con este operador de comparación es un error.

martes, 13 de marzo de 2012

Calcular dias entre dos fechas

Muchas veces necesitamos comprobar los dias que existen entre dos fechas, pues en este metodo se muestras, y se puedan utilizar para calcular el limite de dias para devolver un libro en nuestra aplicación de biblioteca.

    public static void main(String[] args) {
        // Calcular fecha.
        Date fecha = new Date();
        DateFormat dfDateMedium = DateFormat.getDateInstance(DateFormat.MEDIUM);
        DateFormat dfDateShort = DateFormat.getDateInstance(DateFormat.SHORT);
        System.out.println(dfDateMedium.format(fecha)); // 9-3-2012
        System.out.println(dfDateShort.format(fecha)); // 9/3/12
        // Resta fecha.
        System.out.println(fecha.getTime() - fecha.getTime() + "Fecha real");
    }

Mostrar letra DNI

Muchas veces, en algunas aplicaciones necesitamos introducir el DNI que la aplicación nos facilite la letra que le corresponde a ese numero, para realizarlo, hay que introducir en nuestra aplicación java este metodo:

    public char CalcularLetraDNI(int dni) {
    char calculaLetra;

    String juegoCaracteres="TRWAGMYFPDXBNJZSQVHLCKET";
    int modulo= dni % 23;
    char letra = juegoCaracteres.charAt(modulo);
    return letra;
    }

miércoles, 6 de octubre de 2010

Número capicua o palíndromo

Aún que esto sea más bien par matematicas, creo que es muy util para invertir una cifra dada para comprobar luego su son exactos el original con el resultado dado. El caso es para saber si el numero es igual leido de izquierda a derecha que de derecha a izquierda.

    public String Capicua(long num){
        long numOrigen, numInverso, calculo;
        while(num <= 0) {
                 return "El numero no puede ser negativo";
                }
        numOrigen = num;
                ni = 0;
        numInverso = 0;
        //aca le doy vuelta
        while(numOrigen != 0){
            calculo= numOrigen % 10;
            numInverso = numInverso * 10 + calculo;
            numOrigen = numOrigen / 10;

        }
        //comparando
        if (ni == num) {
                    return "El numero es capicua\n";
                }
        else {
                    return "El numero no es capicua\n";
                }
    }

Este codigo en negrita es que realiza todo el proceso.

            calculo= numOrigen % 10;
            numInverso = numInverso * 10 + calculo;
            numOrigen = numOrigen / 10;

jueves, 2 de septiembre de 2010

Metodo para activar las pestañas de un jTabbedPanel

Este metodo es como yo lo suelo utilizar cuando creo un jTabbedPanel, en este ejemplo he utilizado tres pestañas y para activarlo suelo utilizar switch, y a cada boton de la ventana principal tiene una variable, segun cual sea:

1- para la pestaña socio
2- para la pestaña empleado
3- para la pestaña monitor

Y en el jDialog donde esta el jTabbedPane, creo un metodo que se inicie al abrir el jDialog llamado activarPanelCard(), y nos llevara a este metodo:


    private void activarPanelCard() {
        switch (VentanaPrincipal.panelCard) {
            case 1:
                //panel.show(jPanelCard, "socio");
                jTabbedPane.setEnabledAt(0, true);
                jTabbedPane.setEnabledAt(1, false);
                jTabbedPane.setEnabledAt(2, false);
                jTabbedPane.setSelectedIndex(0);
                break;
            case 2:
                //panel.show(jPanelCard, "empleado");
                jTabbedPane.setEnabledAt(0, false);
                jTabbedPane.setEnabledAt(1, true);
                jTabbedPane.setEnabledAt(2, false);
                jTabbedPane.setSelectedIndex(1);
                break;
            case 3:
                //panel.show(jPanelCard, "monitor");
                jTabbedPane.setEnabledAt(0, false);
                jTabbedPane.setEnabledAt(1, false);
                jTabbedPane.setEnabledAt(2, true);
                jTabbedPane.setSelectedIndex(2);
                break;
        }
    }

martes, 31 de agosto de 2010

Mostrar datos de un objeto.

Codigo util para poder mostrar los datos de un objeto que a sido cargado previamente en un ArrayList.

   private void mostrarDatosTenista(int indice) {
      Tenista t = listaTenistas.get(indice);
      jtNombre.setText(t.getNombre());
      jtEdad.setText(String.valueOf(t.getEdad()));
      jtPuntuacion.setText(String.valueOf(t.getPuntuacionATP()));
      dcbPalmares = new DefaultComboBoxModel(t.getPalmares());
      jcbPalmares.setModel(dcbPalmares);

      jtNombre.updateUI();
      jtEdad.updateUI();
      jtPuntuacion.updateUI();
      jcbPalmares.updateUI();
   }


Para crear un objeto tendriamos que crear previamente un ArrayList, de la clase determinada, en este caso hemos creado la clase Tenista, y la creacion seria asi:

    public Tenista getTenista(){
       String nombre = jtNombre.getText();
       int edad = Integer.parseInt(jtEdad.getText());
       return new Tenista(nombre, edad);
    }

lunes, 30 de agosto de 2010

Menu de abrir y guardar archivos

Codigos de abrir y guardar archivos.

Ejemplo para cargar un archivo y llevarlo a un Model de una tabla para cargarlo en una tabla.

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        JFileChooser jMenuItem1 = new javax.swing.JFileChooser();
        jMenuItem1.setCurrentDirectory(new java.io.File("/Volumes/NO NAME 2/programacion/codigos/Examen2007"));
        int selection = jMenuItem1.showOpenDialog(this);
        if (selection == jMenuItem1.APPROVE_OPTION) {
            File fichero = jMenuItem1.getSelectedFile();
            try {
                modeloT.addFilasDesdeFichero(fichero);
                jLabel1.setText("Fichero leido correctamente");
                cambiaEstado(true);
            } catch (OperandoErroneo e) {
                jLabel1.setText("Formato de archivo erroneo");
                cambiaEstado(false);
            } catch (IOException e) {
                jLabel1.setText("Error, no se puede leer el archivo");
                cambiaEstado(false);
            } finally {
                jTable1.setModel(modeloT);
            }
        }
    }


Ejemplo de guardar archivo.

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        JFileChooser jMenuItem1 = new javax.swing.JFileChooser();
        jMenuItem1.setCurrentDirectory(new java.io.File("/Volumes/NO NAME 2/programacion/codigos/Examen2007"));
        int selection = jMenuItem1.showOpenDialog(this);
        if (selection == jMenuItem1.APPROVE_OPTION) {
            File fichero = jMenuItem1.getSelectedFile();
            try {
                modeloT.addFilasDesdeFichero(fichero);
                jLabel1.setText("Fichero leido correctamente");
                cambiaEstado(true);
            } catch (OperandoErroneo e) {
                jLabel1.setText("Formato de archivo erroneo");
                cambiaEstado(false);
            } catch (IOException e) {
                jLabel1.setText("Error, no se puede leer el archivo");
                cambiaEstado(false);
            } finally {
                jTable1.setModel(modeloT);
            }
        }
    }  

domingo, 29 de agosto de 2010

DocumentListener interno en una clase

En esta clase añadimos DocumentListener y no hace falta que tengamos que construir una clase de DocumentListener.

import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
import javax.swing.text.Document;

public class DobleDelNumeroBis extends javax.swing.JFrame{
        public DobleDelNumeroBis() {      
         initComponents();        
    }
   
    private void initComponents() {
        jTF_DobleNumero = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        getContentPane().setLayout(null);
                            
        jTF_Numero.getDocument().addDocumentListener (new DocumentListener(){
             public void insertUpdate(DocumentEvent e) {
                calculaValorDoble(e);
            }
            public void removeUpdate(DocumentEvent e) {
                    calculaValorDoble(e);
            }
            public void changedUpdate(DocumentEvent e) {                  
                                }
          
            private void calculaValorDoble(DocumentEvent e) {
                Document textoNumero = e.getDocument();               
                              
                  String numeroEnLetras = DobleDelNumeroBis.getText_jTF_Numero();
                 
                  try{
                      double numero= Double.parseDouble(numeroEnLetras);
                      double numeroDoble = numero * 2;
                      DobleDelNumeroBis.setText_jTF_DobleNumero(""+numeroDoble);
                      DobleDelNumeroBis.setText_jLabel4(" ");
                  }catch (NumberFormatException nfe){            
                         DobleDelNumeroBis.setText_jLabel4("El valor actual no es un n˙mero real v·lido. CorrÌjalo. ");
                         DobleDelNumeroBis.setText_jTF_DobleNumero(" ");            
                  }          
          }
        });                      
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTF_Numero.setFont(new java.awt.Font("Tahoma", 1, 14));
        jTF_Numero.setForeground(new java.awt.Color(0, 0, 153));
        jTF_Numero.setText("0");
        getContentPane().add(jTF_Numero);
        jTF_Numero.setBounds(240, 60, 230, 30);
       
        jTF_DobleNumero.setEditable(false);
        jTF_DobleNumero.setFont(new java.awt.Font("Tahoma", 1, 14));
        jTF_DobleNumero.setForeground(new java.awt.Color(153, 0, 0));
        jTF_DobleNumero.setText("0");
        getContentPane().add(jTF_DobleNumero);
        jTF_DobleNumero.setBounds(240, 130, 230, 30);

        /* Fijamos las propiedades para la etiqueta que acompaÒa al campo jTF_Numero*/
        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel1.setText("N\u00famero:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(100, 60, 130, 30);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel2.setText("Doble del N\u00famero:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(10, 130, 220, 30);

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel3.setForeground(new java.awt.Color(0, 0, 255));
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Cada vez que modifiques el valor de n\u00famero se actualizar\u00e1 autom\u00e1ticamente el valor de su doble.");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(10, 190, 640, 50);
        jLabel4.setBorder(new javax.swing.border.TitledBorder("\u00c1rea de mensajes."));
        getContentPane().add(jLabel4);
        jLabel4.setBounds(20, 250, 620, 80);
        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setForeground(new java.awt.Color(255,0,0));
       
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-669)/2, (screenSize.height-406)/2, 669, 406);
    }
  
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DobleDelNumeroBis().setVisible(true);
            }
        });
    }
   
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
   
    private static javax.swing.JLabel jLabel4;
    private static javax.swing.JTextField jTF_DobleNumero;
    private static javax.swing.JTextField jTF_Numero;
  
    public static  String getText_jTF_Numero(){
        return jTF_Numero.getText();
    }
   
    public static void setText_jTF_DobleNumero(String texto){
        jTF_DobleNumero.setText(texto);
    }
    public static void setText_jLabel4(String texto){
        jLabel4.setText(texto);
    }
}

Los DocumentListener

Lo que conseguimos con los DocumentListener es una respuesta inmediata sin necesidad de pulsar un boton,  y para ello tendremos que crear la clase que lo implemente, un ejemplo:

import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
import javax.swing.text.Document;

public class ImplementacionDocumentListener implements DocumentListener {
   
    public void insertUpdate(DocumentEvent e) {
            calculaValorDoble(e);
    }
    public void removeUpdate(DocumentEvent e) {
        calculaValorDoble(e);
    }
    public void changedUpdate(DocumentEvent e) {
     
    }
   
    private void calculaValorDoble(DocumentEvent e) {

        Document textoNumero = e.getDocument();

        if (textoNumero.getProperty("nombre").equals("numero")){
          String numeroEnLetras = DobleDelNumero.getText_jTF_Numero();
        
          try{
              double numero= Double.parseDouble(numeroEnLetras);
              double numeroDoble = numero * 2;
              DobleDelNumero.setText_jTF_DobleNumero(""+numeroDoble);
              DobleDelNumero.setText_jLabel4(" ");
          }catch (NumberFormatException nfe){            
                 DobleDelNumero.setText_jLabel4("El valor actual no es un n˙mero real v·lido. CorrÌjalo. ");
                 DobleDelNumero.setText_jTF_DobleNumero(" ");            
          }
            
        }
  }
}


y luego para realizar una llamada desde otra clase donde utilizaremos el DocumentListener sera asi:

ImplementacionDocumentListener miPropioDocumentListener =
           new ImplementacionDocumentListener();
        
 jTF_Numero.getDocument().addDocumentListener (miPropioDocumentListener);

En el cual, la clase que lo contiene seria algo asi:

public class DobleDelNumero extends javax.swing.JFrame {
 
    public DobleDelNumero() {      
         initComponents();        
    }
       private void initComponents() {
       
        jTF_DobleNumero = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
       
        jLabel4 = new javax.swing.JLabel();

        getContentPane().setLayout(null);
               
        ImplementacionDocumentListener miPropioDocumentListener =
           new ImplementacionDocumentListener();
       
                jTF_Numero.getDocument().addDocumentListener (miPropioDocumentListener);
       
                jTF_Numero.getDocument().putProperty("nombre", "numero");
       
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTF_Numero.setFont(new java.awt.Font("Tahoma", 1, 14));
        jTF_Numero.setForeground(new java.awt.Color(0, 0, 153));
        jTF_Numero.setText("0");
        getContentPane().add(jTF_Numero);
        jTF_Numero.setBounds(240, 60, 230, 30);
       
        jTF_DobleNumero.setEditable(false);
        jTF_DobleNumero.setFont(new java.awt.Font("Tahoma", 1, 14));
        jTF_DobleNumero.setForeground(new java.awt.Color(153, 0, 0));
        jTF_DobleNumero.setText("0");
        getContentPane().add(jTF_DobleNumero);
        jTF_DobleNumero.setBounds(240, 130, 230, 30);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel1.setText("N\u00famero:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(100, 60, 130, 30);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel2.setText("Doble del N\u00famero:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(10, 130, 220, 30);
        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel3.setForeground(new java.awt.Color(0, 0, 255));
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Cada vez que modifiques el valor de n\u00famero se actualizar\u00e1 autom\u00e1ticamente el valor de su doble.");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(10, 190, 640, 50);

        jLabel4.setBorder(new javax.swing.border.TitledBorder("\u00c1rea de mensajes."));
        getContentPane().add(jLabel4);
        jLabel4.setBounds(20, 250, 620, 80);
        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setForeground(new java.awt.Color(255,0,0));
       
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-669)/2, (screenSize.height-406)/2, 669, 406);
    }
  
    public static void main(String args[]) {
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DobleDelNumero().setVisible(true);
            }
        });
    }
   
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;   
    private static javax.swing.JLabel jLabel4;
    private static javax.swing.JTextField jTF_DobleNumero;
    private static javax.swing.JTextField jTF_Numero;  
     public static  String getText_jTF_Numero(){
        return jTF_Numero.getText();
    }
   
    public static void setText_jTF_DobleNumero(String texto){
        jTF_DobleNumero.setText(texto);
    }
    public static void setText_jLabel4(String texto){
        jLabel4.setText(texto);
    }
}

viernes, 27 de agosto de 2010

Crear jList y modelos

Para crear jList tendremos que importar ListModel.


import javax.swing.ListModel;


Después creamos en el constructor el modelo de la lista, en el que podemos cargar un ArrayList:


public static DefaultListModel modelo = new DefaultListModel();


luego para mostrar los elemento en el jList tendremos que llevar el arrayList al modelo, añadiendo como lo ariamos con os elementos de un arrayList, y por ultimo agregar el modelo de la lista con el metodo setModel() a la lista jList:



    public static void cargaModeloLista() {
        Iterator it = listaTDev.iterator();
        while (it.hasNext()) {
            Trabajos t = (Trabajos) it.next();
            trabajo = t.getTrabajo();
            modelo.addElement(t.getTrabajo());
        }
        jList1.setModel(modelo);
    }

listaTDev es un ArrayList de la clase Trabajos, listaTDev esta declarado en el constructor como public static:


public static ArrayList listaTDev = new ArrayList();


Y el metodo lo que hace es leerlo para luego añadirlo al modelo con el metodo addElement().

miércoles, 25 de agosto de 2010

Los ArrayList

Los ArrayList son una lista que podemos modificar su tamaño una vez instanciado, podemos añadir, eliminar y modificar.

un ejemplo, podemos crear un arrayList con los nombres de una familiar, entonces haremos lo siguiente:

ArrayList listaFamilia = new ArrayList ;

La lista será de tipo String en la que contendrá los datos de todos y cada unos de los mienbros de la familia.

Otra cosa que se puede hacer es crear un ArrayList del tipo Persona, una clase que hemos creado para nuestro programa, en el que se recoge los datos de nombre, edad, y lugar.

Bien pues, ahora creamos la lista ArrayList listaP, de la que agregaremos los datos de necesarios para crear un objeto con los datos que la clase Persona necesita.

public static ArrayList listaP = new ArrayList();

Ahora, diseñamos el panel con botones, areas de textos, y demás para capturar los datos nombre, edad y lugar, y en el boton aceptar crearemos el evento ActionPerformed:

    private void AgregarActionPerformed(java.awt.event.ActionEvent evt) {                                       
        Personas unaPersona = new Personas(jTextFieldNombre.getText(), jTextFieldEdad.getText(), jTextFieldLugar.getText());
        if (Personas.isPersonaCreada()) {
            listaP.add((Personas) unaPersona);
            mensaje("Persona agregada");
        } else {
            mensaje("No se a agregado la persona");
        }
    }                                      

    private void mensaje(String txt) {
        JOptionPane.showMessageDialog(rootPane, txt);
    }


 En ella crearemos una variable de tipo Persona que sera la que recoja los datos necesarios para que la clase Persona nos cree el objeto que solicitamos.

        
Personas unaPersona = new Personas(jTextFieldNombre.getText(), jTextFieldEdad.getText(), jTextFieldLugar.getText());

Ahora para poder mostrar los datos tendremos que recorrer la lista, y para ello usamos la clase Iterator que hace recorrer cada uno de los elementos asignados al ArrayList.


    private void LeerLista() {
        String name, age, home, cadenaDev, texto = "";
        Iterator it = listaP.iterator();
        while (it.hasNext()) {
                Personas p = (Personas) it.next();
                name = p.getNombre();
                age = p.getEdad();
                home = p.getLugar();
                cadenaDev = "Nombre: " + name + "   Edad: " + age + "\nLugar: " + home + "\n\n";
                texto += cadenaDev;

            }
        jTextAreaPrincipal.setText(texto);
    }

martes, 24 de agosto de 2010

Manejo del aspecto y comportamiento (LookAndFeel)

Existen 3 tipos de aspectos o apariencias (look and feel) proporcionados gratuitamente junto al JDK.

Apariencia Metal. Es la apariencia típica de Java, independiente de la plataforma, o multiplataforma . La clase que contiene la información de este look and feel es:

javax.swing.plaf.metal.MetalLookAndFeel

Para establecer el aspecto de multiplataforma de java, llamado aspecto Metal:


UIManager.setLookAndFeel(javax.swing.plaf.metal.MetalLookAndFeel);



Apariencia Motif. Es la apariencia para plataformas Unix (por ejemplo, para el sistema operativo Linux). La clase que contiene la información de este look an feel es:


Para establecer el aspecto de plataformas Unix, llamado Motif:

com.sun.java.swing.plaf.motif.MotifLookAndFeel 



Apariencia Windows. Es la apariencia para plataformas Windows. La clase correspondiente es:

Para establecer el aspecto de la plataforma windows, será así:
com.sun.java.swing.plaf.windows.WindowsLookAndFeel 



Tambien es posible establecer el aspecto multiplataforma y el aspecto de la plataforma en la que se ejecuta la aplicación Java, usando métodos específicos que obtienen las clases adecuadas para pasárselas como parámetros al método setLookAndFeel() :

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

El metodo getCrossPlataformLookAndFeelClassName() devuelve el nombre de la clase que implementa el aspecto multiplataforma por defecto, el aspecto Metal (o Java Look and Feel).

Con este metodo:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 
Establecemos el aspecto que queremos. En este caso, el método setLookAndFeel() recibe como parámetro un nombre de clase, que es justamente el que 
devuelve el método que se le envía como argumento. Ese método es getSystemLookAndFeelClassName(),
 y el nombre de clase que devuelve es el de la correspondiente al look and feel del sistema en el que se está ejecutando la aplicación.

Librerias AWT y JFC

JFC (Java Foundation Classes)
 
Entre sus clases se incluye un importante grupo de elementos que ayuda a la construcción de interfaces gráficas de usuarios (GUI) en java.

Los elementos que componen las JFC son:

Componentes Swing: comprenden componentes tales como botones, cuadros de texto, ventanas o elementos de menú.

Soporte de diferentes apectos y comportamientos (look and feel): permite la eleccion de diferentes aspectos de entorno. Metal, Motif y windows.

Interfaz java 2D: incorpora graficos en dos dimensiones y textos de alta calidad.

Soporte de impresion y soporte de sonido.


AWT (Abstracts Window Toolkit)

Es un conjunto de paquetes y clases destinadas a proporcionar un kit de herramientas para crear ventanas abstractas que pudieran incluirse en las aplicaciones que se desarrollan con el lenguaje JAVA.

Las clases AWT estan desarrolladas utilizando codigo nativo es decir codigo asociado a plataformas concretas, eso dificulta la portabilidad de las aplicaciones.

El modelo de programación de AWT inicial no era ni siquiera orientado a objetos, aun que si el actual, desde JAVA 1.1.

AWT sigue siendo imprescindible, ya que todos los componentes Swing se construyen haciendo uso de clases de AWT. Los componentes Swing como por ejemplo JButton derivan de la clase Jcomponent, que a su vez deriva de la clase AWT.

La imagen siguiente muestra gráficamente cómo aunque nuestra aplicación esté hecha con Swing, éste se construye sobre AWT, que a su vez se construye sobre JFC.

domingo, 22 de agosto de 2010

Caja de seleccion de archivo JFileChooser

 Se utilizá JFileChooser() en la que en este ejemplo lo utilizaremos para guardar haciendo uso del .showSaveDialog(this), y para cargar un archivo hay que realizar algunos cambio, asi que  la ventana sea de cargar archivos  sería modificando .showOpenDialog(this).

Aqui podemos ver los dos ejemplos.

Guardar archivo

JFileChooser jfcAbrir = new JFileChooser();
       int seleccion = jfcAbrir.showSaveDialog(this);
       if (seleccion == JFileChooser.APPROVE_OPTION) {
          File fichero = jfcAbrir.getSelectedFile();
          if (Tenista.guardar(listaTenistas, fichero) == true) {
             JOptionPane.showMessageDialog(this, "Fichero guardado correctamente", "Almacenamiento correcto", JOptionPane.INFORMATION_MESSAGE);

          } else {
             JOptionPane.showMessageDialog(this, "Error al guardar el fichero", "ERROR", JOptionPane.ERROR_MESSAGE);
          }
       }


Cargar archivo 


JFileChooser jfcAbrir = new JFileChooser();
       int seleccion = jfcAbrir.showOpenDialog(this);
       if (seleccion == JFileChooser.APPROVE_OPTION) {
          File fichero = jfcAbrir.getSelectedFile();
          if ((listaTenistas = Tenista.cargar(fichero)) != null) {
             JOptionPane.showMessageDialog(this, "Fichero cargado correctamente", "Carga correcto", JOptionPane.INFORMATION_MESSAGE);
          } else {
             JOptionPane.showMessageDialog(this, "No ha sido posible abrir el fichero", "ERROR", JOptionPane.ERROR_MESSAGE);
          }
       }

Guardar objeto en ArrayList

Este metodo puede servir para luego cargarlos, y mostrarlo en una tabla o como queramos.

   public static boolean guardar(ArrayList lista, File fichero) {
      try {
         ObjectOutputStream ficheroSalida = new ObjectOutputStream(new FileOutputStream(fichero));
         ficheroSalida.writeObject(lista);
         ficheroSalida.flush();
         ficheroSalida.close();
         return true;
      } catch (FileNotFoundException fnfe) {
         return false;
      } catch (IOException ioe) {
         return false;
      }
   }


El otro metodo de cargar os lo pongo aquí.

sábado, 21 de agosto de 2010

Cargar objetos de un archivo en ArrayList

Metodo para poder cargar de un archivo a un ArrayList. Un ejemplo para el siguiente ArrayList:

ArrayList listaTorneos = null;

El arrayList listaTorneos se a creado utilizando la clase .

Ejemplo de metodo de cargar archivo:

    public static ArrayList cargar(File fichero) {
        ArrayList listaTorneos = null;
        try {
            ObjectInputStream ficheroEntrada = new ObjectInputStream(new FileInputStream(fichero));
            listaTorneos =(ArrayList) ficheroEntrada.readObject();
            ficheroEntrada.close();
            return listaTorneos;
        } catch (ClassNotFoundException cnfe) {
            return null;
        } catch (FileNotFoundException fnfe) {
            return null;
        } catch (IOException ioe) {
            return null;
        }
    }