You are on page 1of 24

ORIENTACION PAF

UF4:
Hi haurà un tipus test que preguntarà sobre conceptes de la POO. Static,
abstract, constructors, herència, polimorfisme, modificadors d'accés, etc. Les
preguntes seran de veritat/fals i test, i s'assemblaran a les que es van anar plantejar al
fòrum al llarg d'aquesta UF.
Alguna pregunta d'entendre què fa un codi, o de detectar i arreglar els errors en
un codi.
UF5:
Cal entendre i saber utilitzar les llistes, els conjunts i els diccionaris (List, Set i
Map).
Cal entendre el mecanisme de les excepcions i saber utilitzar-les: try, catch,
throw i throws.
Cal saber crear una interfície gràfica senzilla. Cal entendre el mecanisme dels
layouts i com combinar-los utilitzant JPanel. Els layouts són els bàsics: FlowLayout,
BorderLayout, GridLayout i BoxLayout. Els controls també són els bàsics: botons,
etiquetes i quadres de text.
Cal entendre i saber utilitzar el mecanisme d'esdeveniments i listeners: fer que
una classe sigui listener, afegir listeners, respondre esdeveniments. Només els tipus de
listeners més comuns.
Cal saber llegir i escriure fitxers de text i binaris.
UF6:
UML: traducció d'un diagrama de BD a un diagrama de classes UML. Només casos
senzills.
BD relacionals: consultes SQL senzilles, Statement i PreparedStatement,
recuperar dades de la BD.
BD no relacionals: guardar i recuperar objectes utilitzant db4o.
_____________________________________________________________________

UF4:
RESUMEN DE CLASES EN JAVA

Clases
public class Persona {
// Atributos
protected String dni;
protected String nombre;
protected String apellido;
protected short edad;
//Constructores
/**
* Constructor por defecto
*/
public Persona(){
}
/**

* Constructor implementado
*/
public Persona(String dni, String nombre, String apellido, short edad){
this.dni= dni;
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
}
/**
* Método
*/
// Retorna: 0 si s'ha pogut canviar l'edat
// 1 : Error per passar una edat negativa
// 2 : Error per passar una edat "enorme"
int setEdat(int novaEdat) {
if (novaEdat<0) return 1;
if (novaEdat>Short.MAX_VALUE) return 2;
edad = (short)novaEdat;
return 0;
}
/**
* Setters y Geters
*/
public void setDni(String dni) {
this.dni = dni;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public void setEdad(short edad) {
this.edad = edad;
}
public String getDni() {
return dni;
}
public String getNombre() {
return nombre;
}
public String getApellido() {
return apellido;
}
public short getEdad() {
return edad;
}
/**
* Implementación del toString
*/
public String toString (){
StringBuffer st = new StringBuffer();
st.append("\n\tDni: " + this.dni);
st.append("\n\tNombre: " + this.nombre);
st.append("\n\tApellido: " + this.apellido);
st.append("\n\tEdad: " + this.edad);
return ( st.toString() );
}

double salario){ //Inicializa otro constructor de la clase extendida pasando parámetros super(dni.Interface public interface Sobornable { void sobreB(double cantidad).getEdad()>40 && compruebaNombre()){ salario+=sueldoPlus. apellido. this. . nombre. short edad. } Clase que extiende de otra clase (Persona) //obtiene las características propias y hereda las de su padre public class Empleado extends Persona { //Atributos /** * Salario del empleado */ protected double salario. this. } //Metodos publicos /** * Suma un plus al salario del empleado si el empleado tiene mas de 40 años * @param sueldoPlus * @return <ul> * <li>true: se suma el plus al sueldo</li> * <li>false: no se suma el plus al sueldo</li> * </ul> */ public boolean plus (double sueldoPlus){ boolean aumento=false. //Constructores /** * Constructor por defecto */ public Empleado(){ } /** * Constructor con 1 parametro * @param salario salario del empleado */ public Empleado(double salario){ //Inicializa el constructor de la clase extendida super(). edad). String apellido. aumento=true. } /** * Constructor con 5 parametros * @param dni dni del empleado * @param nombre nombre del empleado * @param apellido nombre del empleado * @param edad edad del empleado * @param salario salario del empleado */ public Empleado(String dni.salario=salario. if (super. String nombre.salario=salario.

/** * Comision por corrupcion del comercial */ private double sobreB. } public String toString() { return( "\n\tSalario: " + this. } } Clase que implementa una interface (Sobornable) y extiende de otra clase (Empleado) la cual a su vez extiende de otra clase (Persona) //obtiene las características propias y hereda las de su padre (Empleado) y las de su abuelo(Persona) public class Comercial extends Empleado implements Sobornable{ //Atributos.getNombre().equals("")){ return false. } /** * Actualiza el salario * @param salario */ public void setSalario(double salario) { this. aunque no indiquemos nada es como si tuviera los atributos del padre /** * Comision por venta del comercial */ private double comision.toString() ).getSalario() ). } return true.salario = salario. } public String getDatosPersona() { return (super.} return aumento. } //Getters y Setters /** * Devuelve el salario de un empleado * @return salario del empleado */ public double getSalario() { return salario. } //Metodos privados /** * Comprueba que el nombre no este vacio * @return <ul> * <li>true: el nombre es una cadena vacia</li> * <li>false: el nombre no es una cadena vacia</li> * </ul> */ private boolean compruebaNombre(){ if(super. /** * Constructor por defecto */ //Inicializa el constructor propio public Comercial(){ .

comision=0. // Error.Number (para números) T .Element (usado bastante por Java Collections Framework) K .lang. El código siguiente nos mostrará un error: ClaseGenerica<int> myOb = new ClaseGenerica<int>(53). salario). Unos apuntes: T es el tipo genérico que será reemplazado por un tipo real.Type (Representa un tipo. debemos conocer el tipo de dato con el que trabajaremos. Este tipo genérico asumirá el tipo de dato que realmente le pasaremos a la clase. } @Override public void sobreB(double cantidad) { this. nombre. cuando definimos una nueva clase. una clase) . es decir. Este nombre se sustituirá por el tipo real que se le pasará a la clase. } // Getters y Setters public double getComision() { return comision. edad.Integer El tipo de T es java. } public void setSobreB(double sobreB) { this.String Hay que tener en cuenta que los genéricos de java solo funcionan con objetos.lang.setSobreB(cantidad). short edad.comision=comision.sobreB = sobreB. String apellido. this. } /** * Constructor con 5 parametros * @param dni dni del comercial * @param nombre nombre del comercial * @param apellido apellido del comercial * @param edad edad del comercial * @param salario salario del comercial * @param comision comision del comercial */ public Comercial(String dni. sea cual sea el tipo de datos que va a recibir.sobreB. Si queremos realizar una operación específica dentro de esta nueva clase.Key (Llave. double salario. String nombre. podemos hacer uso de los tipos genéricos. double comision) { //Inicializa otro constructor de la clase extendida pasando parámetros super(dni. can't use primitive type Existen una serie de convenciones para nombrar a los genéricos: E .this. } public double getSobreB(){ return this. apellido. T es el nombre que damos al parámetro genérico. } } Clases y tipos genéricos en Java En Java. usado en mapas) N . El resultado será el siguiente: El tipo de T es java.

V .out.lang. super. } public void classType() { System. public void xxx() { System. super.Value (representa el valor.Integer ClaseGenerica<Integer> intObj = new ClaseGenerica<Integer>(88). // Creamos una instancia de ClaseGenerica para String. también se usa en mapas) S.classType().xxx().classType(). } } Y una clase C que extiende de B public class C extends B{ protected int d = 30.out. } public void xxx(int x) { char aux.getName()).println("El tipo de T es " + obj.println ("d en B = " + d). //El tipo de T es java. else aux = 'A'. intObj.getClass().out.println ("Sóc xxx d'A aplicat sobre un objecte de la classe " + aux ).println ("d en A = " + d). Mejor con un ejemplo: class ClaseGenerica<T> { T obj. } } public class MainClass { public static void main(String args[]) { // Creamos una instancia de ClaseGenerica para Integer. if (this instanceof C) aux = 'C'. } . public void xxx(){ System. . //El tipo de T es java.lang. } } Una clase B que extiende de A public class B extends A{ protected int d=20. strObj.println ("d en C = " + d). public ClaseGenerica(T o) { obj = o. else if (this instanceof B) aux = 'B'.xxx().out.String ClaseGenerica<String> strObj = new ClaseGenerica<String>("Test").V etc. public void xxx() { System. } } Ejemplos sobre herencia Tenemos una clase A public class A { protected int d = 10.out.usado para representar otros tipos.U. System.

xxx(0). A oc = new C(). List<String> li = new LinkedList<String>(). Empleado e = new Comercial().d).xxx(0). 90)). System. 70. "PHP". } } La salida quedaría así: Des del mètode "visibilitat" en C: d en C = 30 d en B = 20 Crides al mètode xxx() existent a les tres d en A = 10 d en B = 20 d en A = 10 d en C = 30 d en B = 20 d en A = 10 Crides al mètode xxx(int x) existent a les Sóc xxx d'A aplicat sobre un objecte de la Sóc xxx d'A aplicat sobre un objecte de la Sóc xxx d'A aplicat sobre un objecte de la classes: tres classes: classe A classe B classe C _____________________________________________________________________ UF5: RESUMEN DE COLECCIONES EN JAVA Creación de un List: List <Integer> li = new LinkedList<>(). // (5) ob. } } Si hacemos lo siguiente public class EjerciciosClases { public static void main(String[] args) { int aux. 40. // (3) oc. 20."Delphi"}.out. // (7) Sobornable sb = new Comercial(). Creacción e inicializacion de un List: String llenguatges[] = {"Java".asList(llenguatges).println ("Des del mètode \"visibilitat\" en C:"). "Perl".out.println ("d en C = " + d). "Python". System. oa.xxx(). // (1) System.out. "C#".asList(llenguatges)).xxx(). oa.xxx(0). 60. ((C)oc). // (4) System. List<String> li = Arrays.println("Crides al mètode xxx(int x) existent a les tres classes:"). A oa = new A(). A ob = new B(). // (6) oc. "C++".out.out.visibilitat().public void visibilitat () { System. "C". // (2) ob.println ("d en B = " + super.println("Crides al mètode xxx() existent a les tres classes:").xxx(). Comercial c = new Comercial(). "JavaScript".asList(10. . 30. 50. List<Integer> li = new ArrayList<Integer>(Arrays. //c= new Empleado(). Persona p = c. List<String> li = new LinkedList<>(Arrays. "Visual Basic". 80.

} Métodos sobre un List: List <Integer> li = new LinkedList<Integer>().hasNext()) { System. Iterator it = li.set(pos.size().hasNext()){ System. .println(it. -Añadir valor li. -Saber la posicion del elemento pos = li. "80". ls.size(). -Sustituir un valor de la posicion pos li.List<String> li = new ArrayList<String>(Arrays. "20". -Invertir una lista Collections.hasNext()) System. -Obtener valores li.add(100). i<l.reverse(li). "90")).contains(“texto”).size()-1. } Recorrer un List con un iterator: List <Integer> li = new LinkedList<>(). while(it. -Añadir valor en una posicion //pos es un entero que cuenta desde 0 (primera posicion) li.println(it.println(it.indexOf(“texto”). Métodos sobre un HashMap: -.iterator(). pos = ls.get(pos). "50". -Tamaño del List li. -Eliminar el elemento “texto” li.listIterator().next()). ListIterator<String> it = li. Recorrer un HashSet: HashSet hSet = new HashSet().contains(70).add(pos. Recorrer un ListIterator: while (it. li. ls. for ( int i = 1 .remove(“texto”). -Saber si una lista contiene un elemento li.addAll(li2). i++){ System. "70".asList(llista2). Creación de un ListIterator: List<String> li = new LinkedList<String>().get(i)). while(it.out. Recorrer un List: List <Integer> li = new LinkedList<>().asList("10".”texto”). ls. "40".remove(new Integer(70)). 30). List<String> ls = new LinkedList<String>(). "30".next()). -Eliminar el elemento 70 li.40).indexOf(new Integer(20)). //creamos un iterator Iterator it = hSet. li.set(pos.add(“texto”).out.println(l.Devuelve el numero de elementos del Map paisos.next()). -Sumar 2 listas List<Integer> li2 = Arrays. String> paisos = new HashMap<String. “texto2”).add(pos. "60". } Creación de un HashMap: Map<String.out.out. String>().iterator(). } Creación de un HashSet: HashSet<String> li = new HashSet<String>().

put(18.put(1.put(3. } --mostrar por pantalla todos los valores del mapa for (String value : paisos.iterator(). while(it. "Villa").Entry e = (Map. -.put(14.keySet()) { System. "Capdevila"). "Xabi Alonso"). map.out. -.put(15. } --mostrar con un Iterator por pantalla todos los pares Clave-Valor del mapa Iterator it = paisos.get(K clave). "Puyol").println(“Clave: ” + key + " .put(16.put(1. "Xabi Alonso").out.isEmpty(). map.println("Clave: " + key + " -> Valor: " + treeMap. } --mostrar por pantalla todos los pares Clave-Valor del mapa for (Map.Entry)it.Devuelve una "Collection" con los valores del Map paisos.iterator().getValue(). String> map = new HashMap<Integer.getValue()).put(16.Devuelve el valor de la clave que se le pasa como parámetro o 'null' si la clave no existe paisos.values()) { System.hasNext()){ Integer key = it.println("Clave: " + key + " -> Valor: " + map. V valor). treeMap.Entry entry : paisos. -. "Pedrito").out.put(14.Devuelve true si en el map hay un Valor que coincide con V paisos. System.hasNext()) { Map.entrySet(). map. map.Borra todos los componentes del Map paisos.put(K clave. "Busquets"). String>().Borra el par clave/valor de la clave que se le pasa como parámetro paisos. System.put(8. "Pique"). "Iniesta"). treeMap.put(7.println(key). } Con un HashMap Map<Integer. -.next(). "Pedrito").next(). map.clear(). "Busquets").put(11. treeMap.Devuelve true si en el map hay una clave que coincide con K paisos. -.put(18.hasNext()){ Integer key = it. treeMap.put(7.Valor: " + value).put(5. "Casillas").Añade un elemento al Map paisos. treeMap. "Xavi Hernandez").keySet(). "Capdevila").put(11.values().put(6. // Imprimimos el Map con un Iterador que ya hemos instanciado anteriormente it = treeMap. map.println(value).iterator(). treeMap. treeMap.put(5.getKey().put(8. map. "Puyol"). // Imprimimos el Map con un Iterador Iterator it = map. "Pique").containsKey(K clave). treeMap. System.put(3. System. "Iniesta"). } Con un TreeMap Map<Integer.out. map. -.get(key)).Valor:"+e.containsValue(V valor). -. while(it.getKey()+" . Object value = entry.get(key)).Devuelve true si no hay elementos en el Map y false si si los hay paisos.entrySet()) { String key = entry. String> treeMap = new TreeMap<Integer.remove(K clave).next(). Recorrer un HashMap: --mostrar por pantalla todas las claves del mapa for (String key : paisos. map. "Villa"). String>(). "Casillas"). map. "Ramos"). map.keySet(). } Con un LinkedHashMap . treeMap.out. while (it. "Xavi Hernandez"). treeMap. "Ramos").out.put(6. treeMap.println("Clave: "+e.-.put(15.

RESUMEN EXCEPCIONES Captura de una excepción try { System.containsKey(18) = "+treeMap.length. System.println(e. System.put(16.out.put(1.out.out.treeMap. System.out. System.Map<Integer.put(5.out. String> linkedHashMap = new LinkedHashMap<Integer. System. String valor = jugador. System.. System.out. }finally{ System. "Puyol"). linkedHashMap.containsKey(18)). linkedHashMap.println(e. } catch (ArrayIndexOutOfBoundsException e) { System.out. linkedHashMap.out.println("Vemos si existe un elemento con la clave 1: treeMap. "Casillas"). "Pique"). linkedHashMap.println("Lo comprobamos tambien viendo si esta vacio treeMap.toString()).getValue().clear()").out.out.get(6)).println("Sacabao.println("Vemos que pasa si queremos obtener la clave 18 que ya no existe: treeMap.out.put(14.println("Borramos un elemento del Map el 18 (porque fue sustituido): treeMap. i++) System. System.isEmpty()).out.containsKey(1)). "Pedrito"). linkedHashMap.put(11. System.get(18) = "+treeMap..isEmpty() = "+treeMap. "Villa")..next().println("El programador estava a la lluna.out. "Capdevila").size() = "+treeMap. linkedHashMap.containsValue("Villa")). System.containsValue("Ricardo")).out.get(6) = "+treeMap.out. System. String>().size()). "Iniesta").println("Vemos si existe el valo 'Villa' en el Map: treeMap.put(8.println("Entrem en el mètode met01 i anem a executar met02"). System.size()). linkedHashMap.println("Vemos si existe un elemento con la clave 18: treeMap.out.entrySet()){ Integer clave = jugador. } --Otra try { System.put(6.println("Abans d'executar el for").out.println("Clave: " + key + " -> Valor: " + linkedHashMap.println(clave+" -> "+valor).println("Després d'executar el for"). System.out.out.containsValue(\"Villa\") = "+treeMap.out.get(key)).println("Posició " + i + " : " + t[i]). linkedHashMap.hasNext()){ Integer key = it.getKey().println("Borramos todos los elementos del Map: treeMap.println("Mostramos el numero de elementos que tiene el TreeMap: treeMap. linkedHashMap.out.containsValue(\"Ricardo\") = "+treeMap.size() = "+treeMap. System.remove(18)). // Imprimimos el Map con un Iterador que ya hemos instanciado anteriormente it = linkedHashMap.out. } catch (Exception e) { System. met02().put(3. . "Xavi Hernandez"). String> jugador : linkedHashMap.iterator().println("El programador estava a la lluna.get(18)).println("Comprobamos si lo hemos eliminado viendo su tamaño: treeMap. while(it.put(18.remove(18)"+treeMap.containsKey(1) = "+treeMap. S'ha sortir de límits!!").isEmpty()).out. System.out.getLocalizedMessage()).out.")..keySet().println("Obtenemos un elemento del Map pasandole la clave 6: treeMap.println("Vemos si el TreeMap esta vacio : treeMap. linkedHashMap. System. } Métodos de TreeMap System. for (int i=0.clear().println("********* Trabajando con los métodos de Map *********").isEmpty() = "+treeMap. } --Forma alternativa para recorrer los Map mostrando la Clave y el valor como si fuese un ArrayList for (Entry<Integer. "Busquets").println("Tornem a estar en met01 després de finalitzar met02"). linkedHashMap. System. S'ha sortir de límits!!"). System. "Ramos").put(15.println("Vemos si existe el valo 'Ricardo' en el Map: treeMap. "Xabi Alonso").put(7. i<=t.

newInstance(). import org.xml"). } Lanzamiento de una Excepción : //Metodo con throws para apertura de ficheros public void metodoconThrows (String nomFitxer) throws FileNotFoundException.println ("No s'ha provocat l'excepció. Document document = null.println ("Sortida de verificaLengthTaula.").getMessage()).getLength(). Creación de una Excepción propia: public class MiExcepcion extends Exception { private Integer valor. e.printStackTrace(). } --Otra --Mètode que avalua si la taula t té n cel·les. Element e = document. Lectura de ficheros XML Recorrer un fichero XML con una lista de productos y contar cuantos hay a la venta import javax.println ("\n\tEl metodeAmbClausulaThrows ha finalitzat.toString(). f. en cas de ser avaluada com a fals. if (valor!=0) throw new RuntimeException ("\"1>2\" no puede ser cierto"). } catch (Exception ex) { System.out.xml. una excepció d'obligada gestió: Exception */ public void verificaLengthTaula (int n. System. IOException{ FileInputStream f = new FileInputStream (nomFitxer). i < l. if ("true".*."). .out.getDocumentElement(). try { DocumentBuilder builder = builderFactory. for (int i = 0. NodeList l = e.getElementsByTagName("Producte").*. System.out.out.println("Articles a la venda: " + nreArticles). i++) { Element elem = (Element)l.println(e.dom. String t[]) throws Exception { if (t.getAttribute("aLaVenda"). File f = new File ("miFichero. if (valor!=0) throw new MiExcepcion (valor). document = builder.equals( venda) ) { nreArticles++. provocant.w3c.parsers.out. } } – y provoco la excepcion int valor = 1. String venda = elem.item(i).parse(f). public MiExcepcion (int xxx) { valor = new Integer(xxx).println("Error en la lectura del documento: " + ex).System.close().").out. } --Otra int valor = 1. DocumentBuilderFactory builderFactory = DocumentBuilderFactory. } } System.newDocumentBuilder(). System."). } public String toString () { return "Exception MiExcepcion: Error motivat per valor = " + valor.length!=n) throw new Exception ("La taula no té la llargada indicada.

xml.setTextContent("4").appendChild(hijo). siempre es lo mismo: import javax.createElement("ListaProductos"). //Elementos hijo del anterior Element hijo = doc.xml.appendChild(hijo). StreamResult result = new StreamResult(f).out.newDocumentBuilder(). prod.createElement("Estoc").xml").0").createElement("Producto").*. //Elemento hijo de la raiz Element prod = doc. Document doc = builder. "true"). //Creación del documento DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance().setTextContent("Producto 1").appendChild(raiz). transformer.w3c. hijo.newTransformer().newInstance(). File f = new File("nuevoDocumento. doc. hijo.showMessageDialog(null.transform.DOMSource.transform. prod..} Creacion de ficheros XML import javax.*.StreamResult.createElement("Precio"). "1").transform.transform(source. hijo = doc.setTextContent("10. } RESUMEN DE JAVA SWING showMessageDialog JOptionPane. result). "Hola mundo!!!"). //Elemento raiz Element raiz = doc..setAttribute("id".*.setAttribute("aLaVenta". hijo.xml. } catch (Exception ex) { System. DocumentBuilder builder = builderFactory. prod.parsers. raiz. import javax. Para grabar el documento XML a un fichero.newDocument(). hijo = doc. DOMSource source = new DOMSource(doc).dom. import javax.println("Error guardando fichero: " + ex). . import org. prod. prod.appendChild(hijo).stream.appendChild(prod).dom. Transformer transformer = tf.xml. try { TransformerFactory tf = TransformerFactory.createElement("Nombre"). .

selector.*. final JLabel label = new JLabel("Hola Mundo"). .swing.exit(0). Otros componentes colgando del contenedor de alto nivel (éstas pueden ser contenedores o componentes simples). Ejemplo 1: import javax.showInputDialog("Ingrese un numero: "). Estructura básica de una aplicación Swing.setFileSelectionMode(JFileChooser. import java.YES_OPTION) JOptionPane.event.EXIT_ON_CLOSE). FileNameExtensionFilter filtre = new FileNameExtensionFilter(".".getContentPane(). que provee el soporte que las componentes Swing necesitan para el pintado y el manejo de eventos.awt.awt.showMessageDialog(null. Fitxers de llista de lineas.showDialog(frame. frame. showConfirmDialog int ax = JOptionPane. al menos. if(ax == JOptionPane. "Tria el color".setFileFilter(filtre). Debe existir. showOptionDialog int seleccion = JOptionPane. opcion 1"). JOptionPane. "Has seleccionado NO.setDefaultCloseOperation(JFrame. JLabel label = new JLabel("Un text amb fons de colors"). JOptionPane.event. Una aplicación Swing se construye mezclando componentes con las siguientes reglas. selector.setBackground(res).addWindowListener(new java.showOpenDialog(frame). "opcion 3" }.NO_OPTION) JOptionPane. "Seleccione opcion". Color res = chooser. "opcion 2". "lin").showInputDialog String ax = JOptionPane. else if(ax == JOptionPane.").WHITE). } JFileChooser JFileChooser selector = new JFileChooser().FILES_ONLY). "Estas en java?").QUESTION_MESSAGE.add(label). if (null != res) { label. "Selector de opciones". } } ).").showOptionDialog( unComponentePadre. frame. null.awt.showConfirmDialog(null. new Object[] { "opcion 1". JColorChooser JColorChooser chooser = new JColorChooser(). public class HolaMundoSwing { public static void main(String[] args) { JFrame frame = new JFrame("HolaMundoSwing").*.showMessageDialog(null.WindowAdapter(){ public void windowClosing(WindowEvent e){ System. "Has seleccionado SI.showMessageDialog(null.*. Color. selector. "El numero ingresado es: "+ax). un contenedor de alto nivel (Top-Level Container). //frame. import java.lin.

/** creamos los paneles */ private JPanel panel1. //inicializamos el boton 2 boton2 = new Jbutton(“Bórrame”). //modifica el texto de la etiqueta . panel2. //añadimos los botones y el texto al panel 2 panel2. //inicializamos el campo de texto texto = new JtextField(). /** Creamos los botones */ private JButton boton1. ventana.swing.event. /** Creamos el campo de texto */ private JTextField texto. frame. //insertamos la etiqueta en el panel panel1. panel2. import java.*.add(etiqueta).*.*. // Se le dice a los botones qué tienen que hacer cuando los pulsemos. // Para cada elemento que queramos que haga algo hay que poner un listener boton1.setVisible(true). //inicializamos la etiqueta del titulo etiqueta = new Jlabel(“Mi primer Hola Mundocon Swing”).setText ("Hola mundo"). //añadimos el panel 1 a la ventana ventana.add(boton2).addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //añade texto a la etiqueta “texto” texto. boton2. } } Otro Hola mundo: Hemos creado dos botones y un campo de texto con listeners para los botones que modifican el campo de texto y un label Hay que importar lo siguiente: import java. //añadimos el panel 2 a la ventana ventana.add(panel1).setLayout(new FlowLayout()). // Se le pone un FlowLayout para que el botón y campo de texto quede alineados. //inicializamos los paneles panel1 = New JPanel(). //inicializamos el boton 1 boton1 = new Jbutton(“Púlse“).frame. /** Creamos la etiqueta de texto */ private JLabel etiqueta. // inicializamos la ventana ventana = new Jframe(“Esta el la ventana del Hola Mundo”).add(panel2).getContentPane(). panel2 = new JPanel().awt.add(boton1).pack().add(texto).awt. /** creamos la ventana */ private JFrame ventana.getContentPane(). import javax.getContentPane(). panel2.

// Se le dice a la ventana que termine el programa cuando se la cierre ventana. } }). se hace visible la ventana ventana. panel2. boton2.*.*.event. /** creamos los paneles */ private JPanel panel1.etiqueta. Después de pulsar el botón Púlsame Después de pulsar el botón Bórrame Otro Hola mundo más: Hemos creado dos botones y un campo de texto con otra forma de llamar a los listeners para los botones que modifican el campo de texto. } }).200).setDefaultCloseOperation(WindowConstants.swing. import import import import java.awt. .event.ActionListener.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //borra el texto de la etiqueta “texto” texto. java.setText ("").awt.EXIT_ON_CLOSE). //para dar a una ventana el tamaño justo de su contenido se hace //ventana. javax.ssetSize(600. //finalmente.setVisible(true).pack(). //ventana.ActionEvent.setText("He cambiado la etiqueta").setText("Vuelvo a ser Hola Mundo"). public class Interfaz { /** creamos la ventana */ private JFrame ventana. //modifica el texto de la etiqueta etiqueta. java.pack().awt. //se le da un tamaño a la ventana ventana.

setFont(new Font("Verdana"./** Creamos los botones */ private JButton boton1. //desabilitando los campos de texto texto.white)). boton2. //la hacemos visible ventana. //Quitar bordes a los campos de texto texto.setDefaultCloseOperation(JFrame.setVisible(true). 4)). //hacemos visible el panel 2 panel2. 57).setBounds(35. //redimensionamos el panel1 panel1. //creo el panel 2 panel2 = new JPanel(). //redimensionamos la caja de texto texto. //redimensiono el panel2 panel2.setSize(270. //añadimos los paneles a la ventana ventana.add(panel2). 50)). sur(). 12)). //Se llama a un solo listener ActionListener escuchador = new escuchador().BOLD.createLineBorder(Color. } public void norte(){ //iniciamos la caja de texto texto = new JTextField(""). Font.add(texto).NORTH). //hacemos visible el panel 1 panel1. //constructor public Interfaz(){ // inicializamos la ventana JFrame ventana = new JFrame("Otro Hola Mundo"). //le añadimos un layout ventana. 220. } public void sur(){ //funcion para crear botones pongobotones(). } public void pongobotones(){ //inicializamos el boton 1 .setLayout(new BorderLayout(4.setLocation(100.setBorder(BorderFactory.setHorizontalAlignment(JTextField. // Se le dice a la ventana que termine el programa cuando se la cierre ventana.setVisible(true). 57). BorderLayout. //cambiamos el color de fondo texto. 10. /** Creamos el campo de texto */ private JTextField texto.setSize(270.RIGHT). /** Creamos la etiqueta de texto */ private JLabel etiqueta. //colocamos la ventana en la pantalla ventana.setSize(300.EXIT_ON_CLOSE).white). //la alineamos a la derecho texto. //añadimos la caja de texto al panel panel1.add(panel1.setEditable(false).setBackground(Color. //cambiamos el tipo de letra texto. //cambiamos su tamaño ventana.setVisible(true). //llamamos a dos funciones que rellenan los paneles 1 y 2 norte(). 80). 100). ventana. //inicializamos los paneles //creo el panel 1 panel1 = new JPanel(new BorderLayout(6. 20).

equalsIgnoreCase("Púlse")) texto. } private class escuchador implements ActionListener { public void actionPerformed(ActionEvent e) { JButton botoPulsado = (JButton)e.add(boton2). Font.equalsIgnoreCase("Bórrame")) texto.getSource(). //Aqui el cambio a la hora de hacer el listener boton1. boton2. //añadimos los botones al panel panel2.boton1 = new JButton("Púlse"). panel2.class" NAME = "TestApplet" WIDTH = 400 HEIGHT = 300 HSPACE = 0 VSPACE = 0 ALIGN = middle > </APPLET> </BODY> . Font. String temp = botoPulsado. 11)). 11)).setFont(new Font("Verdana".add(boton1).BOLD." CODE = "applet. } } } Acción que lanza un evento Tipo de listener El usuario hace un click.BOLD.setText ("Hola mundo").addActionListener(escuchador). presiona Return en un área de texto o selecciona un menú ActionListener El usuario escoge un frame (ventana principal) WindowListener El usuario hace un click sobre un componente MouseListener El usuario pasa el mouse sobre un componente MouseMotionListener Un componente se hace visible ComponentListener Un componente adquiere el foco del teclado FocusListener Cambia la selección en una lista o tabla ListSelectionListener Crear un APPLET: //Per incloure un applet dins una pàgina web cal usar l’etiqueta o tag HTML: <HTML> <HEAD> <TITLE> Mi Primer Applet </TITLE> </HEAD> <BODY> <APPLET CODEBASE = ". //cambiamos el tipo de letra de los botones boton1.addActionListener(escuchador).setText ("").getText(). if (temp. //inicializamos el boton 2 boton2 = new JButton("Bórrame"). boton2. if (temp.setFont(new Font("Arial".

leidos). int leidos = 0.read(datos))) out. . copiaDatos(in.applet.</HTML> //La clase tiene que extender de Applet import java. out.read(datos))) out.write(datos.close().*. si no existe.close().println("Error en entrada/salida del fichero") } } Copiar un fichero de texto: Las diferèncias de la copia de ficheros de texto son mínimes respecto a la forma de operar de los flujos orientados a datos.drawString("Primer applet".exists()) file. in. out). Reader in = new Filereader(ruta).createNewFile(). if (!file. public void copiaDatos(Reader in. OutputStream out) { try { byte[] datos = new byte[100]. 10. . while (-1 != (leidos = in.. 10).out.write(datos. public void copiaDatos(InputStream in. copiaDatos(in.0.leidos). } } RESUMEN DE COSAS DE FICHEROS Crear un fichero: File file = new File(ruta).white). public boolean mkdir(). out).0. Writer out = new FileWriter(novaRuta). while (-1 != (leidos = in. //El fitxer no es crea realment en el sistema de fitxers fins a executar el mètode createNewFile //Crea un directorio. } public void paint(Graphics g){ g.. int leidos = 0. OutputStream out = new FileOutputStream(novaRuta). //ficheros de entrada FileInputStream(File fichero) //fichero con su ruta de entrada FileInputStream(String ruta) //fichero de salida FileOutputStream(File fichero) //fichero con ruta de salida FileOutputStream(String ruta) Copiar un fichero de datos: InputStream in = new FileInputStream(ruta). public class Applet1 extends Applet { public void init(){ setBackgroung(Color. Writer out) { try { char[] datos = new char[100]. } catch (IOException) { System.

gis.out. in. char[] datos = new char[100].read(dades). //Marca. out.writeBoolean(boolea1).mark(500). } catch (IOException) { System. OutputStream out = new FileOutputStream(outFilename).read(dades). Writer wr = new OutputStreamWriter(out).read(datos))) out. //Llegim els bytes 100-199 del fitxer bis.writeInt(enter). //Llegim els bytes 400-499 del fitxer bis.close().0. double d = dis. FileOutputStream fos = new FileOutputStream (novaRuta). bis. //Llegim els bytes 100-199 del fitxer bis.close().readBoolean().write(datos. DataInputStream dis = new DataInputStream(new FileInputStream(ruta)). while (-1 != (leidos = in. byte[] dades = new int[100].leidos). dos.read(dades).readInt().read(dades).read(dades).reset(). OutputStream out) { try { Reader rd = new InputStreamReader(in). dos. byte[] datos = new byte[1024].writeBoolean(boolea2). while (-1 != (leidos = rd. int leidos = 0.close().close(). Compressió i descompressió de dades try { GZIPInputStream gis = new GZIPInputStream(new FileInputStream(ruta)).read(dades)..println("Error en entrada/salida del fichero") } } Escritura y lectura de tipos primitivos DataOutputStream dos = new DataOutputStream(new FileOutputStream(ruta)).read(dades). Ja no es pot fer reset() . //Tornem a la marca bis.read(dades). public void copiaTexto(InputStream in. dis. int i = dis. boolean b1 = dis. boolean b2 = dis.close(). //Llegim els bytes 200-299 del fitxer bis.readDouble(). dos. //Llegim els bytes 0-99 del fitxer bis. //Llegim els bytes 300-399 del fitxer bis. FileInputStream fis = new FileInputStream (ruta).readBoolean(). //Llegim els bytes 0-99 del fitxer bis.close().out.read(datos))) .. dos. bis. } catch (IOException) { } De InputStream a Reader Pasar de flujo orientado a datos a fichero de texto. dos. El buffer serà de 500 bytes bis.close(). Retrocediendo en la lectura de un flujo BufferedInputStream bis = new BufferedInputStream(new FileInputStream(ruta)). int leidos = 0.writeDouble(doble). //La marca es perd. siempre que se sepa a priori que el fichero contiene texto.

String texto="". } finally { // Cerramos el fichero // En el finally cerramos el fichero.0.*.close(). con java swing: //Importamos las librerias necerarias import java. //Ponemos como directorio por defecto el mismo del proyecto file.txt". El fichero no existe").")). // abrimos la ventana de JFilechooser file. String linea = null.wr.leidos). //cargamos en el BufferedReader el archivo a leer lee=new BufferedReader(archivo).readLine())) System.setCurrentDirectory(new File(". BufferedReader lee=null. //lanzamos una excepcion si el fichero no se puede leer } catch (IOException e) { throw new RuntimeException("Error. //asignamos al FileReader el archivo abierto archivo=new FileReader(abre). import javax. br.println(linea). } //lanzamos una excepcion si el fichero no se encuentra } catch (FileNotFoundException e) { throw new RuntimeException("Error. //Determinamos el tipo de fichero que queremos abrir FileNameExtensionFilter filter = new FileNameExtensionFilter("fitxer . // lanzamos una excepcion si el error no es ninguno de los anteriores } catch (Exception e) { throw new RuntimeException("Error. try{ // si el BufferedReader no es nulo if( null != lee ){ // cerramos el fichero lee. private static String abrirLeerArchivo() { String aux="". No se puede leer el fichero"). desconocido").getSelectedFile(). //asignamos el filtro a la ventana file. Abrir fichero con filtro del tipo de fichero.swing. lo leemos para plasmarlo *en la consola*/ while((aux=lee. rd.*.out.showOpenDialog(file). } // capturamos una posible excepcion al cerrar el fichero . "txt"). /**recorremos el archivo.setFileFilter(filter).filechooser. FileReader archivo.swing.close(). import javax. //Se muestra todo el contenido per pantalla while (null != (linea = br.*. /**abrimos el archivo seleccionado*/ File abre=file.write(datos.close(). para asegurar que se cierra // tanto si todo va bién como si salta una excepción.io. } catch (IOException) { } } Leer linea a linea un fichero de texto BufferedReader br = new BufferedReader (new FileReader(ruta)).readLine())!=null){ texto+= aux+ "\n". try{ /**llamamos el metodo que permite cargar JFileChooser*/ JFileChooser file=new JFileChooser(). wr.close().

// si el fichero no existe. No se puede leer el fichero"). escribe = new BufferedWriter(archivo). El fichero no existe"). // lanzamos una excepcion si el error no es ninguno de los anteriores } catch (Exception e) { throw new RuntimeException("Error.//El texto que mostraremos en la consola } Escribir un texto en un fichero: private static void escribirArchivo() { FileWriter archivo. */ private Connection conn. } } return texto. //lanzamos una excepcion si el fichero no se encuentra } catch (FileNotFoundException e) { throw new RuntimeException("Error. } // capturamos una posible excepcion al cerrar el fichero }catch (Exception e2){ e2. } archivo = new FileWriter(file.getAbsoluteFile()).close(). desconocido").exists()) { file. /** . }finally{ // si el BufferedReader no es nulo try{ // si el BufferedReader no es nulo if( null != escribe ){ // cerramos el fichero escribe. BufferedWriter escribe = null.txt"). //lanzamos una excepcion si el fichero no se puede leer } catch (IOException e) { throw new RuntimeException("Error.write(contenido). } } } _____________________________________________________________________ UF6 : RESUMEN DE STATEMENT UTILITZANT DB4O /** * Connexió a la base de dades.createNewFile().println("Fichero grabado correctamente"). File file = new File("miFichero.printStackTrace(). System. Ha de valer null quan no hi hagi cap connexió * establerta.}catch (Exception e2){ e2.out. try { String contenido = "Contenido para escribir en un fichero". escribe. se crea if (!file.printStackTrace().

estableixConnexio(). consultaSt = conn.ID = T2.getConnection(urlBaseDades .getMessage(). * * @throws SQLException Si es produeix una excepció a l'establir la connexió (en * aquest cas. throw e. posa la referència a la connexió a null). Carrega el driver per accedir a la BD.forName("org. Obre la connexió * amb la BD.derby.jdbc.ID ) \n" + "WHERE COSA = ? \n" + "ORDER_BY COSA". } finally { conn = null. usuari. } catch (SQLException e) { conn = null. } } /** * Tanca la connexió i posa la referència a la connexió a null.RETURN_GENERATED_KEYS). */ private void estableixConnexio() throws SQLException { String urlBaseDades = "jdbc:derby://localhost:1527/eac11".prepareStatement(consultaSQL).ClientDriver"). * * @throws SQLException */ public void tancaConnexio() throws SQLException { if (conn != null) { try { conn.getMessage(). Statement. } catch (SQLException ex) { throw new JocsDeTaulaException(ex. } catch (ClassNotFoundException ex) { throw new JocsDeTaulaException(ex.close(). } } /** * Estableix la connexió amb la base de dades. /** * Constructor. /* * Sentències preparades corresponents a les anteriors consultes SQL */ private PreparedStatement consultaSt. Crea les sentències preparades. String contrasenya = "root123".apache. */ private static String consultaSQL = "" + "SELECT * \n" + "FROM TABLA1 T1 \n" + " JOIN TABLA2 T2 ON ( T1. } . ex). try { conn = DriverManager. * * @throws JocsDeTaulaException si no s'ha pogut carregar el driver o establir la connexió. */ private static String consultainsereixSQL = "" + "INSERT INTO TABLA1 " + "( ID ) " + "VALUES ( ? )". /** * Sentència SQL que insereix una cosa a la BD. private PreparedStatement ConsultaInsereixSt.* Consulta SQL. ex). String usuari = "root". ConsultaInsereixSt = conn.prepareStatement(consultainsereixSQL. */ public AccesBD() throws JocsDeTaulaException { try { Class. contrasenya).

getString("cosa2")). * @throws JocsDeTaulaException si la partida no s'ha pogut guardar a la BD. // Agafem tots els resultats while (rsPartides.println( coses ). rs. // sempre té un únic resultat de la consulta System. List<String> coses = new ArrayList<String>(). "%"+cosa+"%").err. // Agafem tots els resultats while (rs. */ public void guardaCosa() throws JocsDeTaulaException { try { . } System.err.err.} } /** * Obté les dades d'una cosa donat part de una cosa * */ public void consultaCosa1(String cosa) { try { consultaSt. rs.println(ex.out.getInt("cosa3") .getInt("cosa1") .getMessage()). ResultSet rs = consultaSt.setString(1. } } catch (SQLException ex) { System.next(). } } catch (SQLException ex) { System. } } /** * Obté una dada d'una cosa donat part de una cosa * */ public void consultaCosa2(String cosa) { try { consultaSt. ResultSet rs = consultaSt. try { consultaSt.getString("cosa2") . rs. rs.println(ex. } /** * Insereix una nova partida a la BD. rs. "%"+cosa+"%").getInt("cosa3") . } } catch (SQLException ex) { System.getMessage()). "%"+cosa+"%").out. rs.println(rs.println(ex.getString("cosa2") .executeQuery().executeQuery().next()) { System.getInt("cosa1") .setString(1. // Agafem sempre el primer resultat rs. } } /** * Pinta una llista amb totes les coses donat part de una cosa * * Noteu que aquest és un mètode molt ineficient: es recupera la BD sencera i * molts registres es recuperen diversos cops * */ public void consultaCosa3() { String cosa.executeQuery().next()) { coses.getMessage()).add(rs. * * @param partida La Partida a inserir. ResultSet rs = consultaSt.getInt("conaN")).getInt("cosaN")).setString(1.println(rs.out.

getGeneratedKeys(). // Només té un resultat int id = rsGeneratedKeys.getMessage().setInt(1. partida.println ("La id de la insercion es " + id) } catch (SQLException ex) { throw new JocsDeTaulaException(ex. rsGeneratedKeys.getInt(1). ConsultaInsereixSt.out. // inserim la partida i recuperem la clau id que se li ha generat.executeUpdate(). ex). System.getJoc().ConsultaInsereixSt. } } .next().getId()). ResultSet rsGeneratedKeys = ConsultaInsereixSt.