IMPLEMENTACIÓN EN EL LENGUAJE JAVA DE UNA HERRAMIENTA DE EDICIÓN PARA XML SCHEMA CÓDIGO

Tamaño: px
Comenzar la demostración a partir de la página:

Download "IMPLEMENTACIÓN EN EL LENGUAJE JAVA DE UNA HERRAMIENTA DE EDICIÓN PARA XML SCHEMA CÓDIGO"

Transcripción

1 IMPLEMENTACIÓN EN EL LENGUAJE JAVA DE UNA HERRAMIENTA DE EDICIÓN PARA XML SCHEMA CÓDIGO Departamento de Ingeniería de Sistemas y Automática. Área de Ingeniería Telemática. Escuela Superior de Ingenieros. Universidad de Sevilla PROYECTO FIN DE CARRERA REALIZADO POR: María del Pilar Jiménez Guijarro DIRIGIDO POR: D. Antonio J. Sierra Collado Sevilla, Febrero 2007

2

3 Annotation.java import java.awt.borderlayout; import java.awt.dimension; import java.awt.event.windowadapter; import java.awt.event.windowevent; import javax.swing.boxlayout; import javax.swing.buttongroup; import javax.swing.jdialog; import javax.swing.jlabel; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jradiobutton; import javax.swing.jsplitpane; import javax.swing.jtextfield; import javax.swing.border.emptyborder; /** Clase encargada de la creación de un cuadro de * diálogo para la inserción de un elemento Annotation. Mª del Pilar Jiménez Guijarro. 1.0 */ public class Annotation extends JDialog { /* Esta clase crea el diálogo, pero no realiza la llamada a setvisible(true). * Esto es debido a que, si la llamada se hace desde dentro de esta clase * (ver linea de código comentada más adelante), y al utilizar setmodal(true), * al pulsar los botones del diálogo, no se detectan los eventos que deberían * producirse. Para evitar esto, hay que crear el objeto y llamar a * setvisible(true) en el punto de creación del objeto. */ JRadioButton doc; JRadioButton app; ButtonGroup group; JTextField jtf; JTextField lenguaje ; boolean cerrado = false; /** Constructor de la clase. */ Annotation(){ settitle("wizard: Annotation."); - 3 -

4 setmodal(true); inicializar(); /** Método encargado de la creación de los elementos * que forman el cuadro de diálogo. */ public void inicializar(){ /* Clase anonima para que la aplicacion se cierre al * pulsar la X (boton esquina superior derecha). */ this.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ cerrado = true; ); /* Creación de los elementos JPanel. */ JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); JPanel pan1 = new JPanel(); JPanel pan2 = new JPanel(); BorderLayout bl1 = new BorderLayout(); pan1.setlayout(bl1); BoxLayout bl2 = new BoxLayout(pan2,BoxLayout.Y_AXIS); pan2.setlayout(bl2); pan2.setborder(new EmptyBorder(10, 30, 20, 10)); /* Creación de los Radio Button y del grupo de botones. */ String docstring = "documentation"; doc = new JRadioButton(docString); doc.setmnemonic('d'); doc.setactioncommand(docstring); doc.setselected(true); String appstring = "appinfo"; app = new JRadioButton(appString); app.setactioncommand(appstring); app.setmnemonic('a'); /* Creación de la etiqueta y el campo de texto para el lenguaje. */ JLabel jl = new JLabel(" xml:lang = "); lenguaje = new JTextField (2); lenguaje.setpreferredsize(new Dimension(10,5)); group = new ButtonGroup(); group.add(doc); - 4 -

5 group.add(app); AnnotationRL mylistener = new AnnotationRL(lenguaje); doc.addactionlistener(mylistener); app.addactionlistener(mylistener); /* Añadimos los elementos al panel. */ pan1.add(new JLabel(" Select one of the following elements:")); pan1.add(doc, BorderLayout.NORTH); pan1.add(jl, BorderLayout.WEST); pan1.add(lenguaje, BorderLayout.CENTER); pan1.add(app, BorderLayout.SOUTH); /* Campo de texto y etiqueta para el texto del elemento Annotation. */ jtf = new JTextField(); jtf.setpreferredsize(new Dimension(150,50)); JLabel lab = new JLabel("Insert your annotation s text: "); /* Añadimos los elementos al panel. */ pan2.add(lab); pan2.add(jtf); /* Introducimos los dos JPanel en el JSplitPane. */ sp.setleftcomponent(pan1); sp.setrightcomponent(pan2); sp.setdividerlocation(200); /* Se crea el array de objetos con el texto * introductorio y el splitpane anterior. */ JLabel intro = new JLabel("Fill in the following fields, please."); Object[] array = {intro, sp; /* Se crea el JOptionPane y se establece como * contenido del cuadro de diálogo. */ final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; Object[] options = {btnstring1, btnstring2; JOptionPane jop = new JOptionPane(array, JOptionPane. PLAIN_MESSAGE,JOptionPane.YES_NO_OPTION, null, options, options[0]); setcontentpane(jop); setdefaultcloseoperation(dispose_on_close); pack(); setsize(450, 200); - 5 -

6 setlocation(525,375); /* NO PONER setvisible(true); AQUI!!! Si se pone aquí en vez de desde * donde creamos el objeto, cuando se pone setmodal(true) se produce * un error: no reconoce las pulsaciones de botón.*/ /* Listeners para eventos Action y PropertyChange. */ TextFieldAL tfal = new TextFieldAL(jop); jtf.addactionlistener(tfal); lenguaje.addactionlistener(tfal); AnnotationPCL pcl = new AnnotationPCL(this, jop, jtf, lenguaje); jop.addpropertychangelistener(pcl); - 6 -

7 AnnotationPCL.java import java.beans.propertychangeevent; import java.beans.propertychangelistener; import javax.swing.jdialog; import javax.swing.joptionpane; import javax.swing.jtextfield; /** Clase que escucha cambios en las propiedades del cuadro * de diálogo creado por la clase Annotation. Mª del Pilar Jiménez Guijarro. 1.0 */ public class AnnotationPCL implements PropertyChangeListener { JDialog d; JOptionPane jop; JTextField jtf; JTextField lenguaje; final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; String typedtext = null; String typedtext2 = null; /** Constructor de la clase. */ AnnotationPCL(JDialog dialogo, JOptionPane option, JTextField textfield, JTextField lang){ d = dialogo; jop = option; jtf = textfield; lenguaje = lang; /* Se ejecuta si se produce un evento PropertyChange. * Hereda comentario de documentación. */ public void propertychange(propertychangeevent e) { String prop = e.getpropertyname(); - 7 -

8 if (d.isvisible() && (e.getsource() == jop) && (prop.equals(joptionpane.value_property) prop. equals(joptionpane.input_value_property))) { Object value = jop.getvalue(); if (value == JOptionPane.UNINITIALIZED_VALUE) { return; if (value.equals(btnstring1)) { typedtext = jtf.gettext(); typedtext2 = lenguaje.gettext(); else { /* Miramos si el campo de texto de lenguaje está activado * y si tiene texto, así como si el otro campo de texto * no esta vacio. Si se cumple, quitamos el diálogo de * pantalla. */ if (!typedtext.equals("") && lenguaje.isenabled() &&!typedtext2.equals("")) { d.setvisible(false); /* Si el campo de lenguaje no está activado, miramos * que el segundo campo de texto no esté vacío. */ else if (!typedtext.equals("") &&!lenguaje.isenabled()){ d.setvisible(false); else { /* Falta algún elemento de texto de los necesarios*/ JOptionPane.showMessageDialog(d," There"+ " is some text missing. \n Fill in " + "all the fields, please.","error", JOptionPane.ERROR_MESSAGE); /* Reseteamos el valor del JOptionPane. */ jop.setvalue(joptionpane. UNINITIALIZED_VALUE); /*Si cancelamos, no hacemos nada*/ jtf.settext(""); d.setvisible(false); - 8 -

9 AnnotationRL.java import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jtextfield; /** Clase que escucha las acciones realizadas sobre los * botones de radio de la clase Attribute. Mª del Pilar Jiménez Guijarro. 1.0 */ public class AnnotationRL implements ActionListener { String docstring = "documentation"; JTextField jtf; /** Constructor de la clase. */ AnnotationRL(JTextField lenguaje){ jtf=lenguaje; /** Activa o desactiva el campo de texto correspondiente * al lenguaje, asociado a la opción documentation de la * clase Attribute. */ public void actionperformed(actionevent e) { if (e.getactioncommand().equals(docstring)){ jtf.setenabled(true); else jtf.setenabled(false); - 9 -

10 Attribute.java import java.awt.gridlayout; import java.awt.event.windowadapter; import java.awt.event.windowevent; import javax.swing.jcheckbox; import javax.swing.jdialog; import javax.swing.jlabel; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jtextfield; /** Clase encargada de la creación de un cuadro de * diálogo para la inserción de un elemento Attribute. Mª del Pilar Jiménez Guijarro. 1.0 */ public class Attribute extends JDialog { JTextField jtf1; JTextField jtf2; JTextField jtf3; JTextField jtf4; JTextField jtf5; JLabel jl1; JLabel jl2; JLabel jl3; JLabel jl4; JLabel jl5; JTextField lenguaje; boolean annotation; boolean cancelado = false; boolean cerrado = false; /** Constructor de la clase. */ Attribute(){ settitle("wizard: Attribute."); setmodal(true); inicializar();

11 /** Método encargada de la creación de los elementos * que forman el cuadro de diálogo. */ public void inicializar(){ /* Clase anonima para que la aplicacion se cierre al * pulsar la X (boton esquina superior derecha). */ this.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ cerrado = true; ); /* Se crean los elementos y se añaden al panel. */ JPanel pan1 =new JPanel(); GridLayout gl = new GridLayout(7,2); pan1.setlayout(gl); jl1 = new JLabel("name : "); jl2 = new JLabel("type : "); jl3 = new JLabel("id? : "); jl4 = new JLabel("use? : "); jl5 = new JLabel("value? : "); jtf1 = new JTextField(); jtf2 = new JTextField(); jtf3 = new JTextField(); jtf4 = new JTextField(); jtf5 = new JTextField(); pan1.add(jl1); pan1.add(jtf1); pan1.add(jl2); pan1.add(jtf2); pan1.add(jl3); pan1.add(jtf3); pan1.add(jl4); pan1.add(jtf4); pan1.add(jl5); pan1.add(jtf5); pan1.add(new JLabel ("")); pan1.add(new JLabel ("")); JCheckBox jcb = new JCheckBox("Add Annotation"); pan1.add(jcb); /* Se crea el array de objetos con el texto * introductorio y el panel anterior. */

12 JLabel intro = new JLabel("Fill in the following" + " fields, please. (? = optional )"); Object[] array = {intro, pan1; /* Se crea el JOptionPane y se establece como * contenido del cuadro de diálogo. */ final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; Object[] options = {btnstring1, btnstring2; JOptionPane jop = new JOptionPane(array, JOptionPane. PLAIN_MESSAGE,JOptionPane.YES_NO_OPTION, null, options, options[0]); setcontentpane(jop); setdefaultcloseoperation(dispose_on_close); pack(); setsize(260, 270); setlocation(525,375); /* Listeners para eventos Action y PropertyChange. */ TextFieldAL tfal = new TextFieldAL(jop); jtf1.addactionlistener(tfal); jtf2.addactionlistener(tfal); jtf3.addactionlistener(tfal); jtf4.addactionlistener(tfal); jtf5.addactionlistener(tfal); AttributePCL pcl = new AttributePCL(this, jop, jtf1, jtf2, jcb); jop.addpropertychangelistener(pcl);

13 AttributeGroup.java import java.awt.gridlayout; import java.awt.event.windowadapter; import java.awt.event.windowevent; import javax.swing.jcheckbox; import javax.swing.jdialog; import javax.swing.jlabel; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jtextfield; /** Clase encargada de la creación de un cuadro de diálogo * para la inserción de un elemento AttributeGroup. Mª del Pilar Jiménez Guijarro. 1.0 */ public class AttributeGroup extends JDialog { JTextField jtf1; JTextField jtf2; JLabel jl1; JLabel jl2; boolean annotation; boolean cancelado = false; boolean cerrado = false; /** Constructor de la clase. */ AttributeGroup(){ settitle("wizard: AttributeGroup."); setmodal(true); inicializar(); /** Método encargado de la creación de los elementos * que forman el cuadro de diálogo. */ public void inicializar(){

14 /* Clase anonima para que la aplicacion se cierre al * pulsar la X (boton esquina superior derecha). */ this.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ cerrado = true; ); /* Se crean los elementos y se añaden al panel. */ JPanel pan1 =new JPanel(); GridLayout gl = new GridLayout(4,2); pan1.setlayout(gl); JLabel jl1 = new JLabel("Group s name : "); JLabel jl2 = new JLabel("Number of attributes : "); jtf1 = new JTextField(); jtf2 = new JTextField(); pan1.add(jl1); pan1.add(jtf1); pan1.add(jl2); pan1.add(jtf2); pan1.add(new JLabel ("")); pan1.add(new JLabel ("")); JCheckBox jcb = new JCheckBox("Add Annotation"); pan1.add(jcb); /* Se crea el array de objetos con el texto * introductorio y el panel anterior. */ JLabel intro = new JLabel("Fill in the following " + "fields, please. (? = optional )"); Object[] array = {intro, pan1; final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; Object[] options = {btnstring1, btnstring2; /* Se crea el JOptionPane y se establece como * contenido del cuadro de diálogo. */ JOptionPane jop = new JOptionPane(array, JOptionPane. PLAIN_MESSAGE,JOptionPane.YES_NO_OPTION, null, options, options[0]); setcontentpane(jop); setdefaultcloseoperation(dispose_on_close); pack();

15 setsize(270, 190); setlocation(525,375); /* Listeners para eventos Action y PropertyChange. */ TextFieldAL tfal = new TextFieldAL(jop); jtf1.addactionlistener(tfal); jtf2.addactionlistener(tfal); AttributeGroupPCL pcl = new AttributeGroupPCL( this, jop, jtf1, jtf2, jcb); jop.addpropertychangelistener(pcl);

16 AttributeGroupPCL.java import java.beans.propertychangeevent; import java.beans.propertychangelistener; import javax.swing.jcheckbox; import javax.swing.joptionpane; import javax.swing.jtextfield; /** Clase que escucha cambios en las propiedades del cuadro * de diálogo creado por la clase AttributeGroup. Mª del Pilar Jiménez Guijarro. 1.0 */ public class AttributeGroupPCL implements PropertyChangeListener { AttributeGroup d; JOptionPane jop; JTextField name; JTextField number; JCheckBox jcb; final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; String typedtext = null; String typedtext2 = null; /** Constructor de la clase. */ AttributeGroupPCL(AttributeGroup dialogo, JOptionPane option, JTextField nombre, JTextField num_att, JCheckBox box){ d = dialogo; jop = option; name = nombre; number = num_att; jcb = box; /* Se ejecuta si se produce un evento PropertyChange. * Hereda comentario de documentación.*/ public void propertychange(propertychangeevent e) {

17 String prop = e.getpropertyname(); if (d.isvisible() && (e.getsource() == jop)&& (prop.equals(joptionpane.value_property) prop. equals(joptionpane.input_value_property))) { Object value = jop.getvalue(); if (value == JOptionPane.UNINITIALIZED_VALUE) { return; if (value.equals(btnstring1)) { typedtext = name.gettext(); typedtext2 = number.gettext(); else { /* Miramos si los campos obligatorios contienen texto. */ if (!typedtext.equals("") &&!typedtext2.equals("")) { if(jcb.isselected()) d.annotation = true; d.setvisible(false); else { /* Falta algún elemento de texto de los necesarios*/ JOptionPane.showMessageDialog(d," There"+ " is some text missing. \n Fill in " + "all the fields, please.","error", JOptionPane.ERROR_MESSAGE); jop.setvalue(joptionpane. UNINITIALIZED_VALUE); /*Si cancelamos, no hacemos nada*/ d.cancelado = true; d.setvisible(false);

18 AttributePCL.java import java.beans.propertychangeevent; import java.beans.propertychangelistener; import javax.swing.jcheckbox; import javax.swing.joptionpane; import javax.swing.jtextfield; /** Clase que escucha cambios en las propiedades del cuadro * de diálogo creado por la clase Attribute. Mª del Pilar Jiménez Guijarro. 1.0 */ public class AttributePCL implements PropertyChangeListener { Attribute d; JOptionPane jop; JTextField name; JTextField type; JCheckBox jcb; final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; String typedtext = null; String typedtext2 = null; /** Constructor de la clase. */ AttributePCL(Attribute dialogo, JOptionPane option, JTextField nombre, JTextField tipo, JCheckBox box){ d = dialogo; jop = option; name = nombre; type = tipo; jcb = box; /* Se ejecuta si se produce un evento PropertyChange. * Hereda comentario de documentación. */ public void propertychange(propertychangeevent e) {

19 String prop = e.getpropertyname(); if (d.isvisible() && (e.getsource() == jop) && (prop.equals(joptionpane.value_property) prop. equals(joptionpane.input_value_property))) { Object value = jop.getvalue(); if (value == JOptionPane.UNINITIALIZED_VALUE) { return; if (value.equals(btnstring1)) { typedtext = name.gettext(); typedtext2 = type.gettext(); else { /* Miramos si los campos obligatorios contienen texto. */ if (!typedtext.equals("") &&!typedtext2.equals("")) { if(jcb.isselected()) d.annotation = true; d.setvisible(false); else { /* Falta algún elemento de texto de los necesarios*/ JOptionPane.showMessageDialog(d," There"+ " is some text missing. \n Fill in " + "all the fields, please.","error", JOptionPane.ERROR_MESSAGE); jop.setvalue(joptionpane. UNINITIALIZED_VALUE); /*Si cancelamos, no hacemos nada*/ d.cancelado = true; d.setvisible(false);

20 CodeDocument.java import java.util.*; import javax.swing.text.attributeset; import javax.swing.text.badlocationexception; import javax.swing.text.defaultstyleddocument; import javax.swing.text.element; /** Clase encargada del tratamiento del texto * que se inserta en un panel de edición. Mª del Pilar Jiménez Guijarro. 1.0 */ public class CodeDocument extends DefaultStyledDocument{ /* Almacena el valor del prefijo asignado al * espacio de nombres de XML Schema.*/ String prefijo; MyJEditorPane jep; /* Variable booleana para saber si estamos leyendo de un archivo, en cuyo * caso usaremos el insertstring de la clase padre, sin hacer ningún tipo * de comparación y con el AttributeSet que nos pasan como parametro. Si * no estamos leyendo de un archivo sino insertando caracteres por teclado * sí haremos las comprobaciones. */ boolean leer = false; /* Para almacenar las palabras clave a insertar. */ private String word = ""; /* Posición actual de inserción de texto. */ private int currentpos = 0; /* Vector que contiene las palabras clave de XML Schema. */ private Vector keywords = new Vector(); /* Modos en los que podemos encontrarnos al tratar el texto y variable * (mode) que almacena el modo en que estamos en cada instante.*/ public static int STRING_MODE = 10; public static int TEXT_MODE = 11; public static int PI_MODE = 12; public static int COMMENT_MODE = 13; private int mode = TEXT_MODE;

21 boolean insertando_varios = false; /* Se utiliza para, al poner un signo ">", no poner la etiqueta de * cierre salvo si lo que tenemos previamente es una palabra clave. */ boolean palabra_clave = false; /* Variables para almacenar el punto en que se encuentra el Caret y * ver si ha sido desplazado a un punto no contiguo a donde estaba.*/ int posicion_previa = 0; int posicion_aux; /* Variable para indicar que es el caracter ">", para que cuando sea cierre de * comentario o PI y vengamos de otro renglón NO LO PONGA EN ROJO. */ boolean cierre = false; boolean cierre_com = false; boolean cierre_pi = false; /* Cuentan el número de etiquetas de apertura y cierre de PI o comentario. */ int abre_comment = 0; int cierra_comment = 0; int abre_pi = 0; int cierra_pi = 0; /* ****************************************************** */ /* ****************** CONSTRUCTOR ******************* */ /* ****************************************************** */ /** Constructor de la clase. */ public CodeDocument(MyJEditorPane j) { jep = j; /* ****************************************************** */ /* **************** INSERCIÓN DE TEXTO **************** */ /* ****************************************************** */ /** Método sobrescrito:acepta cualquier longitud de * cadena y realiza el procesamiento de caracteres. */ public void insertstring(int offs, String str, AttributeSet a) throws BadLocationException{ posicion_previa = currentpos; if(!leer){

22 super.insertstring(offs, str, jep.normal); else int strlen = str.length(); if(strlen > 1) insertando_varios = true; int endpos = offs + strlen; int strpos; for (int i=offs;i<endpos;i++){ currentpos = i; strpos = i - offs; processchar(str.charat(strpos)); currentpos = offs; insertando_varios= false; super.insertstring(offs, str, a); /* ****************************************************** */ /* ********* PROCESAMIENTO DE CARACTERES ********** */ /* ****************************************************** */ /** Método que convierte el char que se le pasa como parámetro * a String y llama a proccesschar(string str). */ public void processchar(char strchar){ char[] chrstr = new char[1]; chrstr[0] = strchar; String str = new String(chrstr); processchar(str); /** Método que procesa cada caracter para ver en qué modo estamos, * a qué modo hay que pasar y cuales son las acciones a realizar. */ public void processchar(string str){ char strchar = str.charat(0); posicion_aux=posicion_previa + 1; /* CUIDADO: Lo que viene ahora se encarga de buscar comentarios * o PIs si hemos cambiado la posición del cursor. Estas * comprobaciones no las haremos cuando estamos insertando

23 * varios elementos a la vez, es decir, un string completo * (mediante un copy-paste por ejemplo), ya que insertstring * se encarga, en este caso, de que se compruebe si hay PI * o comentario al insertar así. */ if(!insertando_varios){ if(posicion_aux!= currentpos){ /* Reinicializamos estas variables antes de hacer * el tratamiento. */ cierre = false; cierre_com = false; cierre_pi = false; if (strchar == '>') cierre = true; /* Sólo válido para que, en el caso de tener "<!-" e * introducir "-", se retire lo anterior y se ponga * todo "<!--" de color verde. */ if (strchar == '-') checkforcomment(); buscar_comment(); if (mode == TEXT_MODE) buscar_pi(); else{ /* Si el caracter es ">", saldremos de la función * buscar_comment()en modo comentario. En ese * caso, si no se hace lo que sigue, escribiriamos * en verde (comentario). Con las lineas siguientes * se consigue que pasemos a ver si ese cierre * pertenece al cierre de un PI (?>), o si sólo * forma parte de un comentario o de un PI. */ if(!cierre_com && cierre_pi) buscar_pi(); if(mode == COMMENT_MODE){ switch (strchar){ case('>'):{ /* Ponemos ya a false la variable cierre. */ cierre = false; /*Para ver cuando cambiar el modo comentario. */ checkforcomment(); /* Si después de esta función seguimos en modo

24 * comentario es porque no era cierre, entonces * hay que escribir el ">" en color verde. Como * en el método insertstring ya ha sido insertado * el elemento, lo sustituimos en color verde * mediante insertcommentstring(). */ if(mode==comment_mode){ insertcommentstring(str, this.currentpos); break; default: insertcommentstring(str, this.currentpos); else if(mode == PI_MODE){ switch (strchar){ case('>'):{ /* Ponemos ya a false la variable cierre. */ cierre = false; /*Para ver cuando cambiar el modo PI*/ checkforpi(); else{ /* Si después de esta función seguimos en modo PI es * porque no era cierre, entonces hay que escribir el ">" en * color celeste. Como en el método insertstring ya ha sido * insertado el elemento, lo sustituimos en color celeste. */ if(mode==pi_mode){ insertpistring(str, this.currentpos); break; default: insertpistring(str, this.currentpos); switch (strchar){ case('<'):case('/'):{ char[] chrstr = new char[1]; chrstr[0] = strchar; insertopensign(new String(chrstr),currentPos); break; case (' '): case('\n'):case('>'):{ checkforkeyword();

25 if(strchar == '>'){ char[] chrstr = new char[1]; chrstr[0] = strchar; insertclosesign(new String(chrstr),currentPos); if (mode == STRING_MODE && strchar == '\n'){ mode = TEXT_MODE; break; case ('-'):{ checkforcomment(); break; case ('?'):{ checkforpi(); break; case ('"'):case('\''):{ inserttextstring(str, currentpos); checkforstring(); break; default: break; if (mode == TEXT_MODE){ checkforstring(); if (mode == STRING_MODE){ inserttextstring(str, this.currentpos); /* ****************************************************** */ /* ************** FUNCIONES DE BÚSQUEDA ************* */ /* ****************************************************** */ /** Método que cuenta el número de comillas simples o dobles en la línea

26 * en que nos encontramos y activa el modo String si es necesario.*/ public void checkforstring(){ int offs = currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ /* Esta es la forma de obtener el texto que nos * interesa (una línea) desde el elemento párrafo. */ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ System.err.println("no text"); int strlen = elementtext.length(); if (strlen == 0) return; int i = 0; if (element.getstartoffset() > 0){ /* Traducimos hacia atrás si es necesario: sólo comprobaremos * de donde empieza el elemento hasta el punto de inserción.*/ offs = offs - element.getstartoffset(); int quotecount = 0; int aposcount = 0; if ((offs >= 0) && (offs <= strlen-1)){ i = offs; while (i >0){ /* El bucle chile camina hacia atrás hasta y mientras * vamos contando las comillas simples y dobles. */ char charat = elementtext.charat(i); if ((charat == '"')){ quotecount ++; if ((charat == '\'')){ aposcount ++; i--; int rem = quotecount % 2; int rem2 = aposcount % 2; mode = (rem == 0 && rem2==0)? TEXT_MODE: STRING_MODE;

27 /** Método que busca si hay palabras clave en la línea y * la escribe en color azul en caso de encontrar alguna.*/ public void checkforkeyword(){ if (mode!= TEXT_MODE) { return; int offs = currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ /* Esta es la forma de obtener el texto que nos * interesa (una línea) desde el elemento párrafo. */ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ System.err.println("no text"); int strlen = elementtext.length(); if (strlen == 0) return; int i = 0; if (element.getstartoffset() > 0){ /* Traducimos hacia atrás si es necesario: sólo comprobaremos * de donde empieza el elemento hasta el punto de inserción.*/ offs = offs - element.getstartoffset(); if ((offs >= 0) && (offs <= strlen-1)){ i = offs; while (i >0){ /* El bucle chile camina hacia atrás hasta hasta que se * encuentre un elemento de los que buscamos. */ i--; char charat = elementtext.charat(i); if ((charat==' ') (i==0) charat=='<' charat==('/')){ if ((charat==' ') charat=='<' charat==('/')){ /* Para no coger el caracter limite: i++. */ i++; word = elementtext.substring(i, offs); String s = word.trim(); /* Aquí es donde realmente se compara con las * palabras clave almacenadas en el vector. */

28 if (keywords.contains(s)){ palabra_clave = true; insertkeyword(word, currentpos); break; /** Método que cambia a modo comentario o modo texto si es necesario, y * sustituye cierto texto en color verde mediante insertcommentstring(). */ public void checkforcomment(){ int offs = currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ /* Esta es la forma de obtener el texto que nos * interesa (una línea) desde el elemento párrafo. */ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ System.err.println("no text"); int strlen = elementtext.length(); if (strlen == 0) return; int i = 0; if (element.getstartoffset() > 0){ /* Traducimos hacia atrás si es necesario: sólo comprobaremos * de donde empieza el elemento hasta el punto de inserción.*/ offs = offs - element.getstartoffset(); /* Offset mayor o igual que tres para no tener elementos * negativos al tomar los elementos commentstartchar.*/ if ((offs >= 3) && (offs <= strlen-1)){ i = offs; char commentstartchar1 = elementtext.charat(i-3); char commentstartchar2 = elementtext.charat(i-2); char commentstartchar3 = elementtext.charat(i-1); char commentstartchar4 = elementtext.charat(i); if (commentstartchar1 == '<' && commentstartchar2 == '!' && commentstartchar3 == '-' && commentstartchar4 == '-'){

29 mode = COMMENT_MODE; insertcommentstring("<!--", currentpos-3); else if (commentstartchar2 == '-' && commentstartchar3 == '-' && commentstartchar4 == '>'){ mode = TEXT_MODE; insertcommentstring("-->", currentpos-2); /** Método que cambia a modo PI o modo texto si es necesario, y * sustituye cierto texto en color rojo mediante insertpistring(). */ public void checkforpi(){ int offs = currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ /* Esta es la forma de obtener el texto que nos * interesa (una línea) desde el elemento párrafo. */ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ ex.printstacktrace(); int strlen = elementtext.length(); if (strlen == 0) return; int i = 0; if (element.getstartoffset() > 0){ /* Traducimos hacia atrás si es necesario: sólo comprobaremos * de donde empieza el elemento hasta el punto de inserción.*/ offs = offs - element.getstartoffset(); /* Offset mayor o igual que uno para no tener elementos * negativos al tomar los elementos PIStartChar.*/ if ((offs >= 1) && (offs <= strlen-1)){ i = offs; char PIStartChar1 = elementtext.charat(i-1); char PIStartChar2 = elementtext.charat(i); if (PIStartChar1 == '<' && PIStartChar2 == '?'){ mode = PI_MODE;

30 this.insertpistring("<?", currentpos-1); else if (PIStartChar1 == '?' && PIStartChar2 == '>'){ mode = TEXT_MODE; this.insertpistring(">", currentpos); /** Método que busca comentario. Se utiliza en el caso * en que hayamos cambiado el cursor de posición.*/ public void buscar_comment(){ abre_comment = 0; cierra_comment = 0; int offs = currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ System.err.println("no text"); int strlen = elementtext.length(); if (strlen == 0) return; int i = 0; if (element.getstartoffset() > 0){ offs = offs - element.getstartoffset(); /*Offset mayor o igual que tres para no tener elementos negativos al * almacenar los elementos commentstartchar.*/ if ((offs >= 3) && (offs <= strlen-1)){ i = offs; while (i>=3){ char commentstartchar1 = elementtext.charat(i-3); char commentstartchar2 = elementtext.charat(i-2); char commentstartchar3 = elementtext.charat(i-1); char commentstartchar4 = elementtext.charat(i); if (commentstartchar1 == '<' && commentstartchar2-30 -

31 == '!' && commentstartchar3 == '-' && commentstartchar4 == '-'){ abre_comment ++; else if (commentstartchar2 == '-' && commentstartchar3 == '-' && commentstartchar4 == '>'){ cierra_comment ++; i--; if(cierre){ /* Retomo el texto, para ver si el cierre pertenece a la * etiqueta de cierre de un PI, a la de un comentario o * forma parte de alguno del PI o el comentario. Para ello * utilizaré dos variables, cierre_com y cierre_pi.*/ i = offs; char c1 = elementtext.charat(i-2); char c2 = elementtext.charat(i-1); char c3 = elementtext.charat(i); if (c1 == '-' && c2 == '-' && c3 == '>'){ cierre_com = true; cierre_pi = false; else if(c2 == '?' && c3 == '>'){ cierre_pi = true; cierre_com = false; else{ /* Caso en que el simbolo de cierre forma parte * de la PI o del comentario, pero no cierra * ninguno de esos elementos. */ cierre_com = false; cierre_pi = false; if ((abre_comment == cierra_comment) &&!cierre) mode = TEXT_MODE; else{ /* En el caso de que sea cierre, pero no cierre de * comentario, por ejemplo, insertar una etiqueta * de cierre a un elemento que hubiésemos olvidado * cerrar, no estaremos en modo comentario sino en * modo texto para cerrar la etiqueta en rojo y * añadir la etiqueta de cierre. (Ver buscar_pi(), * que realiza una comprobación más concreta. */ if(cierre &&!cierre_com) mode = TEXT_MODE; else

32 else mode = TEXT_MODE; mode = COMMENT_MODE; /** Método que busca PIs. Se utiliza en el caso * en que hayamos cambiado el cursor de posición.*/ public void buscar_pi(){ abre_pi = 0; cierra_pi = 0; int offs = currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ System.err.println("no text"); int strlen = elementtext.length(); if (strlen == 0) return; int i = 0; if (element.getstartoffset() > 0){ offs = offs - element.getstartoffset(); /* Offset mayor o igual que uno para no tener elementos * negativos al almacenar los elementos PIStartChar.*/ if ((offs >= 1) && (offs <= strlen-1)){ i = offs; while(i>=1){ char PIStartChar1 = elementtext.charat(i-1); char PIStartChar2 = elementtext.charat(i); if (PIStartChar1 == '<' && PIStartChar2 == '?'){ abre_pi++; else if (PIStartChar1 == '?' && PIStartChar2 == '>'){ cierra_pi ++;

33 i--; else if ((abre_pi == cierra_pi) &&!cierre) mode = TEXT_MODE; else{ if(cierre &&!cierre_pi &&!cierre_com){ /* Tenemos el elemento ">", pero no cierra * ni un comentario ni un PI. Entonces:*/ if(abre_pi!= cierra_pi) /* Estamos dentro de un PI*/ mode = PI_MODE; else if(abre_comment!= cierra_comment) /* Estamos dentro de un comentario!*/ mode = COMMENT_MODE; else /* Lo insertaremos en rojo. */ mode = TEXT_MODE; else if(cierre &&!cierre_pi) mode = TEXT_MODE; else mode = PI_MODE; mode = TEXT_MODE; /* ****************************************************** */ /* ************* FUNCIONES DE INSERCIÓN ************* */ /* ****************************************************** */ /** Método para insertar palabras clave en color azul. */ public void insertkeyword(string str, int pos){ try{ /* Eliminamos la palabra antigua y formateamos */ this.remove(pos - str.length(), str.length()); /* Reemplazamos con la misma palabra, pero con nuevo formato. * Debemos llamar al método de la superclase insertstring aqui, * de otro modo acabaríamos en un bucle infinito!*/ super.insertstring(pos - str.length(), str, jep.etiqueta); catch (Exception ex){

34 ex.printstacktrace(); /** Método para insertar texto entrecomillado en color rosa. */ public void inserttextstring(string str, int pos){ try{ this.remove(pos,str.length()); super.insertstring(pos, str, jep.valoratributo); catch (Exception ex){ ex.printstacktrace(); /** Método para insertar comentarios en color verde. */ public void insertcommentstring(string str, int pos){ try{ this.remove(pos,str.length()); super.insertstring(pos, str, jep.comentario); catch (Exception ex){ ex.printstacktrace(); /** Método para insertar PIs en color rojo. */ public void insertpistring(string st, int pos){ try{ this.remove(pos,st.length()); super.insertstring(pos, st, jep.declaracion_pi); catch (Exception ex){ ex.printstacktrace(); /** Método para insertar el símbolo de apertura de etiqueta en color rojo. */ public void insertopensign(string str, int pos){ try{ this.remove(pos,str.length());

35 super.insertstring(pos, str, jep.apertura); catch (Exception ex){ ex.printstacktrace(); /** Método para insertar el símbolo de cierre de etiqueta en color rojo. */ public void insertclosesign(string str, int pos){ try{ this.remove(pos,str.length()); super.insertstring(pos, str, jep.apertura); /* Si estoy insertando varios caracteres a la vez (paste), * no quiero que, si se trata de una etiqueta correcta, * se inserte el elemento de cierre de dicha etiqueta. */ if(!insertando_varios && palabra_clave){ etiqueta_cierre(); palabra_clave = false; mode = TEXT_MODE; catch (Exception ex){ ex.printstacktrace(); /** Método para insertar la etiqueta de cierre * para una etiqueta de apertura (si procede). */ public void etiqueta_cierre(){ /* Realizamos la búsqueda del texto que forma la etiqueta * (obviando todos los atributos que pueda haber). */ String st = ""; int offs = this.currentpos; Element element = this.getparagraphelement(offs); String elementtext = ""; try{ elementtext = this.gettext(element.getstartoffset(), element.getendoffset() - element.getstartoffset()); catch(exception ex){ ex.printstacktrace(); int strlen = elementtext.length(); if (strlen == 0) return;

36 int i = 0; if (element.getstartoffset() > 0){ offs = offs - element.getstartoffset(); if ((offs >= 0) && (offs <= strlen-1)){ i = offs; while (i >0){ i--; char charat = elementtext.charat(i); if(charat == '/') break; if(charat == ' ') /* Cuando encuentro un espacio, modifico la * variable offs que es el punto máximo del * elemento que tomaré en st para añadir * dentro de la etiqueta de cierre */ offs = i; if (charat == '<'){ i++; st = elementtext.substring(i, offs); try{ offs = this.currentpos+1; String apert = "</"; String cierre = ">"; super.insertstring(offs,apert, jep.apertura); offs += apert.length(); super.insertstring(offs, st, jep.etiqueta); offs += st.length(); super.insertstring(offs, cierre, jep.apertura); catch (Exception ex){ ex.printstacktrace(); break; /* ****************************************************** */ /* ***************** OTRAS FUNCIONES ***************** */ /* ****************************************************** */ /** Método que asigna el vector pasado como * parámetro a la variable keywords. */

37 public void setkeywords(vector akeywordlist){ if (akeywordlist!= null){ this.keywords = akeywordlist;

38 EventHandler.java import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.joptionpane; /** Clase que escucha las acciones que el usuario realiza en la GUI. Mª del Pilar Jiménez Guijarro. 1.0 */ public class EventHandler implements ActionListener { Inicial i; /** Constructor de la clase. */ EventHandler(Inicial application) { i = application; /* Se ejecuta cuando se produce algún evento Action por las * acciones del usuario. Hereda comentario de documentación. */ public void actionperformed(actionevent e) { /* Salir. */ if (e.getsource() == i.exitmenu) { i.exit(); /* Abrir fichero (tanto en menú File como botón del toolbar). */ else if (e.getsource() == i.openmenu e.getsource() == i.openbutton) { i.openfile(false, null); /* Abrir fichero nuevo (tanto en menú File como botón del toolbar). */ else if (e.getsource() == i.newmenu e.getsource() == i.newbutton) { i.newfile(); /* Salvar. */ else if (e.getsource() == i.savemenu e.getsource() == i.savebutton) {

39 i.savefile(); /* Salvar Como. */ else if (e.getsource() == i.saveasmenu) { i.savefileas(); /* Cerrar un fichero. */ else if (e.getsource() == i.closemenu e.getsource() == i.closep) { i.closefile(); /* Cerrar todos. */ else if (e.getsource() == i.closeallmenu e.getsource() == i.closeallp){ i.closeallfiles(); /* Cerrar todos menos éste. */ else if (e.getsource() == i.closeallexceptmenu e.getsource() == i.closeallexceptp) { i.closeallexceptthis(); /* Refrescar. */ else if (e.getsource() == i.refreshtabmenu e.getsource() == i.refreshbutton) { i.refresh(); /* Refrescar y Salvar. */ else if (e.getsource() == i.refreshandsavemenu) { i.refreshandsave(); /* Si queremos ver el about del editor. */ else if (e.getsource() == i.abouteditormenu) { JOptionPane.showMessageDialog(i, " Lyon Editor 1.0\n" + "Realizado por Pilar Jiménez Guijarro", "About Lyon Editor", JOptionPane.INFORMATION_MESSAGE); /* Código añadido para "abrir reciente" */ else if (e.getsource() == i.jmi1) { i.openrecentfile(i.jmi1.gettext()); else if (e.getsource() == i.jmi2) { i.openrecentfile(i.jmi2.gettext());

40 else if (e.getsource() == i.jmi3) { i.openrecentfile(i.jmi3.gettext()); else if (e.getsource() == i.jmi4) { i.openrecentfile(i.jmi4.gettext()); /* Código añadido para la inserción de elementos. */ else if (e.getsource() == i.annotationmenu e.getsource() == i.annotationbutton) { i.annotation(); else if (e.getsource() == i.attributemenu e.getsource() == i.attributebutton) { i.attribute(); else if (e.getsource() == i.attributegroupmenu e.getsource() == i.attributegroupbutton) { i.attributegroup(); else if (e.getsource() == i.importmenu e.getsource() == i.importbutton) { i.importar(); else if (e.getsource() == i.includemenu e.getsource() == i.includebutton) { i.include();

41 Import.java import java.awt.dimension; import java.awt.gridlayout; import java.awt.event.windowadapter; import java.awt.event.windowevent; import javax.swing.jcheckbox; import javax.swing.jdialog; import javax.swing.jlabel; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jsplitpane; import javax.swing.jtextfield; /** Clase encargada de la creación de un cuadro de * diálogo para la inserción de un elemento Import. Mª del Pilar Jiménez Guijarro. 1.0 */ public class Import extends JDialog { JTextField jtf1; JTextField jtf2; JTextField jtf3; boolean annotation; boolean cancelado = false; boolean cerrado = false; /* Constructor de la clase. */ Import(){ settitle("wizard: Import."); setmodal(true); inicializar(); /** Método encargado de la creación de los elementos * que forman el cuadro de diálogo. */ public void inicializar(){

42 /* Clase anonima para que la aplicacion se cierre al * pulsar la X (boton esquina superior derecha). */ this.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ cerrado = true; ); /* Creamos un JSplitPane, pues tendremos dos partes diferenciadas. */ JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); sp.setpreferredsize(new Dimension(450,150)); /* Creamos los paneles y añadimos los elementos. */ JPanel pan1 =new JPanel(); JPanel pan2 =new JPanel(); GridLayout gl = new GridLayout(3,2); pan1.setlayout(gl); JLabel jl1 = new JLabel("id? : "); JLabel jl2 = new JLabel("namespace? : "); JLabel jl3 = new JLabel("schemaLocation? : "); jtf1 = new JTextField(); jtf2 = new JTextField(); jtf3 = new JTextField(); pan1.add(jl1); pan1.add(jtf1); pan1.add(jl2); pan1.add(jtf2); pan1.add(jl3); pan1.add(jtf3); JCheckBox jcb = new JCheckBox("Add Annotation"); pan2.add(jcb); /* Añadimos los paneles al JSplitPane. */ sp.setleftcomponent(pan1); sp.setrightcomponent(pan2); sp.setdividerlocation(250); /* Se crea el array de objetos con el texto * introductorio y el splitpane anterior. */ JLabel intro = new JLabel("Fill in the following " + "fields, please. (? = optional )"); Object[] array = {intro, sp; /* Se crea el JOptionPane y se establece como

43 * contenido del cuadro de diálogo. */ final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; Object[] options = {btnstring1, btnstring2; JOptionPane jop = new JOptionPane(array, JOptionPane. PLAIN_MESSAGE,JOptionPane.YES_NO_OPTION, null, options, options[0]); setcontentpane(jop); setdefaultcloseoperation(dispose_on_close); pack(); setsize(450, 200); setlocation(525,375); /* Listeners para eventos Action y PropertyChange. */ TextFieldAL tfal = new TextFieldAL(jop); jtf1.addactionlistener(tfal); jtf2.addactionlistener(tfal); jtf3.addactionlistener(tfal); ImportPCL pcl = new ImportPCL(this, jop, jcb); jop.addpropertychangelistener(pcl);

44 ImportPCL.java import java.beans.propertychangeevent; import java.beans.propertychangelistener; import javax.swing.jcheckbox; import javax.swing.joptionpane; /** Clase que escucha cambios en las propiedades del cuadro * de diálogo creado por la clase Import. Mª del Pilar Jiménez Guijarro. 1.0 */ public class ImportPCL implements PropertyChangeListener { String id; String namespace; String schemaloc; Import d; JOptionPane jop; final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; JCheckBox jcb; /* Constructor de la clase. */ ImportPCL(Import dialogo, JOptionPane option, JCheckBox box){ d = dialogo; jop = option; jcb = box; /* Se ejecuta si se produce un evento PropertyChange. * Hereda comentario de documentación. */ public void propertychange(propertychangeevent e) { String prop = e.getpropertyname(); if (d.isvisible() && (e.getsource() == jop) && (prop.equals(joptionpane.value_property) prop. equals(joptionpane.input_value_property))) {

45 Object value = jop.getvalue(); if (value == JOptionPane.UNINITIALIZED_VALUE) { return; if (value.equals(btnstring1)) { if(jcb.isselected()){ d.annotation = true; /* d.cancelado vale false -> * realizaremos las acciones! */ d.setvisible(false); else { /*Si cancelamos, no hacemos nada*/ d.annotation = false; d.cancelado = true; d.setvisible(false);

46 Include.java import java.awt.dimension; import java.awt.gridlayout; import java.awt.event.windowadapter; import java.awt.event.windowevent; import javax.swing.jcheckbox; import javax.swing.jdialog; import javax.swing.jlabel; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jsplitpane; import javax.swing.jtextfield; /** Clase encargada de la creación de un cuadro de * diálogo para la inserción de un elemento Include. Mª del Pilar Jiménez Guijarro. 1.0 */ public class Include extends JDialog { JTextField jtf1; JTextField jtf2; boolean annotation; boolean cancelado = false; boolean cerrado = false; /** Constructor de la clase. */ Include(){ settitle("wizard: Include."); setmodal(true); inicializar(); /** Método encargado de la creación de los elementos * que forman el cuadro de diálogo. */ public void inicializar(){

47 /* Clase anonima para que la aplicacion se cierre al * pulsar la X (boton esquina superior derecha). */ this.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ cerrado = true; ); /* Creamos un JSplitPane, pues tendremos dos partes diferenciadas. */ JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); sp.setpreferredsize(new Dimension(450,150)); /* Creamos los paneles y añadimos los elementos. */ JPanel pan1 =new JPanel(); JPanel pan2 =new JPanel(); GridLayout gl = new GridLayout(2,2); pan1.setlayout(gl); JLabel jl1 = new JLabel("id? : "); JLabel jl2 = new JLabel("schemaLocation : "); jtf1 = new JTextField(); jtf2 = new JTextField(); pan1.add(jl1); pan1.add(jtf1); pan1.add(jl2); pan1.add(jtf2); JCheckBox jcb = new JCheckBox("Add Annotation"); pan2.add(jcb); /* Añadimos los paneles al JSplitPane. */ sp.setleftcomponent(pan1); sp.setrightcomponent(pan2); sp.setdividerlocation(250); /* Se crea el array de objetos con el texto * introductorio y el splitpane anterior. */ JLabel intro = new JLabel("Fill in the following" + " fields, please. (? = optional )"); Object[] array = {intro, sp; /* Se crea el JOptionPane y se establece como * contenido del cuadro de diálogo. */ final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; Object[] options = {btnstring1, btnstring2;

48 JOptionPane jop = new JOptionPane(array, JOptionPane. PLAIN_MESSAGE,JOptionPane.YES_NO_OPTION, null, options, options[0]); setcontentpane(jop); setdefaultcloseoperation(dispose_on_close); pack(); setsize(450, 150); setlocation(525,375); /* Listeners para eventos Action y PropertyChange. */ TextFieldAL tfal = new TextFieldAL(jop); jtf1.addactionlistener(tfal); jtf2.addactionlistener(tfal); IncludePCL pcl = new IncludePCL(this, jop, jcb, jtf2); jop.addpropertychangelistener(pcl);

49 IncludePCL.java import java.beans.propertychangeevent; import java.beans.propertychangelistener; import javax.swing.jcheckbox; import javax.swing.joptionpane; import javax.swing.jtextfield; /** Clase que escucha cambios en las propiedades del cuadro * de diálogo creado por la clase Include. Mª del Pilar Jiménez Guijarro. 1.0 */ public class IncludePCL implements PropertyChangeListener { String id; String schemaloc; Include d; JOptionPane jop; JTextField jtf; String text; final String btnstring1 = "Enter"; final String btnstring2 = "Cancel"; JCheckBox jcb; /** Constructor de la clase. */ IncludePCL(Include dialogo, JOptionPane option, JCheckBox box, JTextField jtf_schema){ d = dialogo; jop = option; jcb = box; jtf = jtf_schema; /* Se ejecuta si se produce un evento PropertyChange. * Hereda comentario de documentación. */ public void propertychange(propertychangeevent e) { String prop = e.getpropertyname();

50 if (d.isvisible() && (e.getsource() == jop) && (prop.equals(joptionpane.value_property) prop. equals(joptionpane.input_value_property))) { Object value = jop.getvalue(); if (value == JOptionPane.UNINITIALIZED_VALUE) { return; if (value.equals(btnstring1)) { /* Sólo compruebo el texto de schemalocation. */ text = jtf.gettext(); else { /* En este caso, si el campo de texto correspondiente al * schemalocation está vacío, mostraremos un diálogo de * error ya que es un campo obligatorio. */ if (!text.equals("")) { if(jcb.isselected()){ d.annotation = true; /* d.cancelado vale false -> * realizaremos las acciones! */ d.setvisible(false); else { /* Falta el elemento de texto de schemalocation*/ JOptionPane.showMessageDialog(d," The field " + "schemalocation is REQUIRED. \n " + "Fill in at least this field, please.", "ERROR", JOptionPane.ERROR_MESSAGE); jop.setvalue(joptionpane. UNINITIALIZED_VALUE); /*Si cancelamos, no hacemos nada*/ d.annotation = false; d.cancelado = true; d.setvisible(false);

51 Inicial.java import javax.swing.action; import javax.swing.box; import javax.swing.imageicon; import javax.swing.jbutton; import javax.swing.jfilechooser; import javax.swing.jframe; import javax.swing.jmenu; import javax.swing.jmenubar; import javax.swing.jmenuitem; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jpopupmenu; import javax.swing.jscrollpane; import javax.swing.jsplitpane; import javax.swing.jtabbedpane; import javax.swing.jtoolbar; import javax.swing.keystroke; import javax.swing.swingutilities; import javax.swing.uimanager; import javax.swing.text.defaulteditorkit; import javax.swing.text.document; import javax.swing.text.jtextcomponent; import javax.swing.undo.undomanager; import java.awt.borderlayout; import java.awt.container; import java.awt.cursor; import java.awt.insets; import java.awt.toolkit; import java.awt.event.actionlistener; import java.awt.event.keyevent; import java.awt.event.mouselistener; import java.awt.event.windowadapter; import java.awt.event.windowevent; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.file; import java.io.filereader; import java.io.filewriter; import java.util.hashtable;

52 /** Clase que inicializa la GUI, y se encarga de la realización de * acciones de apertura, cierre, salvaguarda, etc. de ficheros. Mª del Pilar Jiménez Guijarro. 1.0 */ public class Inicial extends JFrame{ static Inicial application; /* Diálogo de elección de archivos y Barra de Menu.*/ JFileChooser filechooser = null; JMenuBar menubar; /* Menus e Items de Menus para el Menu Inicial.*/ JMenu filemenu; JMenu aboutmenu; JMenuItem newmenu; JMenuItem openmenu; JMenu openrecentmenu; JMenuItem exitmenu; JMenuItem abouteditormenu; /* Menu e items para completar el menu inicial. ATENCIÓN!!! No se * inicializan aqui; aqui se definen para poderlos usar a lo largo de * todo el programa.*/ JMenuItem closemenu; JMenuItem closeallmenu; JMenuItem closeallexceptmenu; JMenuItem savemenu; JMenuItem saveasmenu; /* Lo mismo que lo anterior, pero para refresh.*/ JMenu refreshmenu; JMenuItem refreshtabmenu; JMenuItem refreshandsavemenu; JButton refreshbutton; /* Similar pero para Insert. */ JMenu insertmenu; JMenuItem annotationmenu; JMenuItem attributemenu; JMenuItem attributegroupmenu; JMenuItem complextypemenu; JMenuItem elementmenu; JMenuItem groupmenu; JMenuItem importmenu; JMenuItem includemenu; JMenuItem notationmenu; JMenuItem redefinemenu;

Desarrollo de Aplicaciones en Java INF 473

Desarrollo de Aplicaciones en Java INF 473 Desarrollo de Aplicaciones en Java INF 473 Desarrollo de Interfaces Gráficas Componentes Swing II Prof. José Miguel Rubio jose.rubio.l@ucv.cl jrubio@inf.ucv.cl PUCV Marzo 2008 0 Generación de código Diferencia

Más detalles

Ángel Villa Brasero - Actividad Foro Unidad 2 26/11/ Clases de la aplicación. ApNumeroPerfecto.java. VentanaPrincipal.java

Ángel Villa Brasero - Actividad Foro Unidad 2 26/11/ Clases de la aplicación. ApNumeroPerfecto.java. VentanaPrincipal.java 1. Clases de la aplicación ApNumeroPerfecto.java package numero_perfecto; import java.awt.dimension; import java.awt.toolkit; import javax.swing.jframe; import javax.swing.uimanager; public class ApNumeroPerfecto

Más detalles

Examen de Programación II (Ingeniería Informática)

Examen de Programación II (Ingeniería Informática) Examen de Programación II (Ingeniería Informática) Septiembre 2010 1) Lenguaje C (2 puntos) Escribir el módulo "elimina_substring" (ficheros elimina_substring.h y elimina_substring.c) que defina una única

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

IC Programación Orientada a Objetos I. Programación de Interfaces Gráficas de Usuario (GUI) 2

IC Programación Orientada a Objetos I. Programación de Interfaces Gráficas de Usuario (GUI) 2 IC 2003-1 5033 Programación Orientada a Objetos I 10 Programación de Interfaces Gráficas de Usuario (GUI) 2 1 INTRODUCCIÓN Es difícil pensar en que una aplicación desarrollada actualmente, sea atractiva

Más detalles

Desarrollo de Aplicaciones en Java INF 473

Desarrollo de Aplicaciones en Java INF 473 Desarrollo de Aplicaciones en Java INF 473 Desarrollo de Interfaces Gráficas Componentes Swing Prof. José Miguel Rubio jose.rubio.l@ucv.cl jrubio@inf.ucv.cl PUCV Marzo 2008 0 Interfaces de usuario en java

Más detalles

Interfaces Gráficas de Usuario

Interfaces Gráficas de Usuario Interfaces Gráficas de Usuario Las componentes de una GUI desarrollada en Java son objetos de una clase provista por los paquetes AWT o Swing o de una clase derivada de ellas. Cada componente está caracterizada

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión VI Interfaces Gráficas de Usuario... 9 Introducción... 10 Componentes... 13 Container... 16 Gestores

Más detalles

Práctica 18c. Práctica 18c. José M. Ordax

Práctica 18c. Práctica 18c. José M. Ordax Práctica 18c José M. Ordax chemi@javahispano.org 1 Copyright 2004 José M. Ordax Este documento puede ser distribuido solo bajo los términos y condiciones de la Licencia de Documentación de javahispano

Más detalles

Lenguajes de Programación Curso Práctica 8. Interfaces gráficas de usuario y Swing. Trabajo con modelos. 1. Un ejemplo 2. 2.

Lenguajes de Programación Curso Práctica 8. Interfaces gráficas de usuario y Swing. Trabajo con modelos. 1. Un ejemplo 2. 2. Objetivos Interfaces gráficas de usuario y Swing. Trabajo con modelos. Índice 1. Un ejemplo 2 2. Tareas 7 1 Como se comentó en las clases de teoría, el tratamiento de eventos en aquellos componentes Swing

Más detalles

Ejemplo de la Clase Persona

Ejemplo de la Clase Persona Ejemplo de la Clase Persona public class Persona // Declaración de atributos private String nombre; private int edad; // Constructor public Persona(String nombre, int edad) this.nombre = nombre; this.edad

Más detalles

NetC.Time. Historia. Tito Agudelo Pedro Fula Yesid Gutierrez Oscar Munevar

NetC.Time. Historia. Tito Agudelo Pedro Fula Yesid Gutierrez Oscar Munevar Parcial 02 04/10/10 II Parcial Analisis de Algoritmos NetC.Time s Metodo Shell Sort Tito Agudelo Pedro Fula Yesid Gutierrez Oscar Munevar Historia El ordenamiento Shell (Shell sort en inglés) es un algoritmo

Más detalles

1 Funcionalidades Java que se presentan en esta práctica

1 Funcionalidades Java que se presentan en esta práctica Índice 1 Funcionalidades Java que se presentan en esta práctica... 1 2 Una aplicación gráfica en Java... 1 3 El manejo de eventos en Java... 2 4 Tareas... 3 1 Funcionalidades Java que se presentan en esta

Más detalles

Programación de sistemas

Programación de sistemas Programación de sistemas Interfaces Gráficas I. Conceptos básicos II. Eventos Departamento de Ingeniería Telemática José Jesús García Rueda y Carlos Alario Hoyos

Más detalles

Pasos requeridos para establecer el manejo de eventos para un componente de GUI.

Pasos requeridos para establecer el manejo de eventos para un componente de GUI. Manejo de eventos con clases anidadas. Por lo general un usuario interactúa con una GUI para indicar las tareas que ésta debe realizar. Por ejemplo, al escribir un mensaje de correo electrónico, pulsamos

Más detalles

Transparencias de Java. Tema 7: AWT. Uploaded by Ingteleco

Transparencias de Java. Tema 7: AWT. Uploaded by Ingteleco Transparencias de Java Tema 7: AWT Uploaded by Ingteleco http://ingteleco.webcindario.com ingtelecoweb@hotmail.com La dirección URL puede sufrir modificaciones en el futuro. Si no funciona contacta por

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*;

import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; 1 1 1 1 0 1 0 1 /* 1 - Desarrolle un programa que permita el ingreso de dos * números en controles de tipo JTextField y mediante dos * controles de tipo JRadioButton permita seleccionar si * queremos sumarlos

Más detalles

2.1 Elementos gráficos en Java.

2.1 Elementos gráficos en Java. Practica0 de 1. Programa Java tipo consola public class Clase0 { public static void main(string[] args) { System.out.println("Hola Mundo"); System.out.println("Estamos en clase de Interfaces de Usuario");

Más detalles

Formato para prácticas de laboratorio

Formato para prácticas de laboratorio CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA IC 2003-1 5033 Programación Orientada a Objetos I PRÁCTICA No. 10 LABORATORIO DE Ingeniero en Computación y Licenciado en Sistemas Computacionales

Más detalles

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre Algoritmos http://www.lfcia.org/alg/ 2007-2008 Ingeniería Informática Ingeniería Técnica de Informática de Gestión Práctica 5 Fecha límite de entrega: viernes, 14 de diciembre Implementación de un Diccionario

Más detalles

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON Una aplicación sin usar Formulario A continuación vamos a desarrollar una aplicación sencilla que permita calcular el área del triángulo dado los valores

Más detalles

Agenda. Contenedores y componentes

Agenda. Contenedores y componentes Agenda Tipos de objetos y clases de la GUI Guía detallada para crear una interfaz gráfica de usuario Guía detallada para la gestión de eventos Problema 1 del boletín 5 Problema 2 del boletín 5 Contenedores

Más detalles

Programación Avanzada. Práctica de uso de excepciones Una forma de implementarlo.

Programación Avanzada. Práctica de uso de excepciones Una forma de implementarlo. Práctica de uso de excepciones Una forma de implementarlo. A continuación se muestran las dos clases solicitadas en la práctica de Excepciones. Los métodos promedio y frecuencias se realizaron de manera

Más detalles

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen Primer Certamen Primera parte, sin apuntes (30 minutos; 1/3 de la nota): 1.- Responda brevemente y entregue en hoja con su nombre. a. Al redefinir un método en una subclase, es posible retornar un objeto

Más detalles

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Ingeniería del Software Separación entre Presentación y Lógica del Negocio Introducción En este laboratorio desarrollaremos una aplicación que verifica si una cuenta y un password son correctos. En dicha aplicación la presentación y la lógica del negocio se definirán en dos capas

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Programación Orientada a Objetos Tema 5: Desarrollo de interfaces gráficas de usuario Tema 5-2: Conceptos avanzados de SWING Contenidos Tema 5-2: Conceptos avanzados de SWING 1. COMPONENTES AVANZADOS 2.

Más detalles

7.- ANEXOS. Anexo 1.-Diagramas uml LISTADO DE CLASES EN UML. Clase P1. Clase FrameAWT

7.- ANEXOS. Anexo 1.-Diagramas uml LISTADO DE CLASES EN UML. Clase P1. Clase FrameAWT 7.- ANEXOS. Anexo 1.-Diagramas uml LISTADO DE CLASES EN UML. Clase P1 Clase FrameAWT 76 Clase Constantes ClasePanelCentral Clase Mimenubar Clase Mimenu 77 Clase JButFuente Clase JButCola Clase JButServidor

Más detalles

Aplicaciones de Escritorio

Aplicaciones de Escritorio Aplicaciones de Escritorio Interfaces Gráficas con Java Disertantes: Ing. Rasjido, José. AdeS Montenegro, Cristian. Agenda Interfaz Grafica de Usuario Interfaz Grafica de Usuario Aplicaciones de escritorio

Más detalles

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; } PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)

Más detalles

Instrucción de selección múltiple switch.

Instrucción de selección múltiple switch. Instrucción de selección múltiple switch. Java cuenta con la instrucción switch de selección múltiple para realizar distintas acciones, con base en os posibles valores de una variable o expresión entera.

Más detalles

Laboratorio de Redes de Comunicaciones Recursos de Sistema en Java

Laboratorio de Redes de Comunicaciones Recursos de Sistema en Java Laboratorio de Redes de Comunicaciones Recursos de Sistema en Java Properties System Runtime Swing Properties (I) Un property define atributos de forma persistente. Son adecuados cuando los valores de

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 5 Construyendo la Interfaz Gráfica Marcela Hernández Hoyos Motivación Interfaz usuario Modelo del mundo Usuario Único medio de comunicación entre el usuario

Más detalles

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

import java.applet.*; import java.awt.*; import java.awt.event.*; /* Conway s Game Of Life (in Spanish) Juego de la Vida v. 0.1 implementacion de Henrik Mitsch (henx@bigfoot.com) probablemente online en http://henx.home.dhs. org/juegodelavida.html */ import java.applet.*;

Más detalles

Programación de sistemas

Programación de sistemas Programación de sistemas Interfaces Gráficas I. Conceptos básicos II. Eventos Departamento de Ingeniería Telemática José Jesús García Rueda y Carlos Alario Hoyos

Más detalles

PROGRAMACION I Archivos directos

PROGRAMACION I Archivos directos PROGRAMACION I Archivos directos Un archivo relativo (directo) consiste en una colección de registros de longitud fija almacenados uno al lado del otro en un dispositivo de almacenamiento de acceso directo.

Más detalles

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:... Cuadernillo de examen ASIGNATURA Laboratorio de Sistemas Operativos Abiertos (Java) CÓDIGO 321 CONVOCATORIA Extraordinaria de Septiembre de 2003 PLAN DE ESTUDIOS 1996 ESPECIALIDAD Sistemas CURSO 2002/2003

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Septiembre 2003 1) Se dispone del siguiente array de números reales ya creado.

Más detalles

Interfaces gráficas en Java GUIs Graphical User Interface

Interfaces gráficas en Java GUIs Graphical User Interface Diseño Y Aplicaciones de Sistemas Distribuidos Interfaces gráficas en Java GUIs Graphical User Interface Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica

Más detalles

Sistema de Archivos en Java

Sistema de Archivos en Java David González Segundo SISTEMAS OPERATIVOS ICO-16 Fecha: 27/Octubre/2014 Sistema de Archivos en Java Propósito: El alumno elaborara un programa en el que representa el sistema de archivos que permita guardar,

Más detalles

Estructura de las Aplicaciones Orientadas a Objetos El patrón Modelo-Vista-Controlador (MVC)

Estructura de las Aplicaciones Orientadas a Objetos El patrón Modelo-Vista-Controlador (MVC) Estructura de las Aplicaciones Orientadas a Objetos El patrón Modelo-Vista-Controlador (MVC) Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial

Más detalles

Interfaces gráficas. Jose Jesus García Rueda

Interfaces gráficas. Jose Jesus García Rueda Interfaces gráficas Jose Jesus García Rueda Introducción Qué son las interfaces gráficas? Ejemplos bien conocidos Vamos a programar una: Colores.java Conceptos básicos Aplicación gráfica. Contenedores.

Más detalles

Creemos una GUI para la siguiente tabla de la base de datos.

Creemos una GUI para la siguiente tabla de la base de datos. Consideración en el diseño de una GUI: Debe ser intuitiva Definir los modos de interacción: Flexibles y adecuados Dar opciones de interrumpir una acción, volver a ejecutar una acción Pasos repetidos: macros

Más detalles

Universidad Carlos III de Madrid Repositorio institucional e-archivo Trabajos acadømicos http://e-archivo.uc3m.es Proyectos Fin de Carrera 2012-03 Algoritmos y videojuegos Mart nez Ferrari, Mar a del Carmen

Más detalles

EJERCICIO GUIADO. JAVA: DISEÑO DE FORMULARIOS DESDE CÓDIGO

EJERCICIO GUIADO. JAVA: DISEÑO DE FORMULARIOS DESDE CÓDIGO EJERCICIO GUIADO. JAVA: DISEÑO DE FORMULARIOS DESDE CÓDIGO La Ventana de Diseño La ventana de diseño es una gran herramienta que nos permite diseñar formularios de forma relativamente sencilla. Simplemente

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Junio 2004 1) Se desea crear una clase para hacer cálculos sobre el movimiento

Más detalles

INTERFACES GRÁFICAS. Algoritmia y Programación

INTERFACES GRÁFICAS. Algoritmia y Programación Algoritmia y Programación CONTENIDO GUI s (Graphic User Interfaces) Qué son? Componentes Layouts Eventos Editor Componentes Layouts Eventos Slide 2 Qué son? Una interfaz gráfica de usuario (GUI) presenta

Más detalles

Universidad de los Andes Ingeniería de Sistemas y Computación

Universidad de los Andes Ingeniería de Sistemas y Computación Universidad de los Andes Ingeniería de Sistemas y Computación ISIS1205 - Algorítmica y Programación por Objetos II 2006-1 Hoja de Trabajo sobre los menus El objetivo de este taller es aprender a utilizar

Más detalles

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005 24 Noviembre 2005 disponibles de acceso public private protected de tipo static abstract final modificadores más avanzados que no vamos a ver... Clase Sintaxis modificadores class nombreclase{} Tipos primitivos

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Junio 2005 1) Escribir una clase con un atributo privado que sea un array de

Más detalles

Problema 1 (2 puntos)

Problema 1 (2 puntos) Programación de Sistemas Grado en Ingeniería de Sistemas de Comunicaciones y Grado en Ingeniería Telemática Leganés, 21 de marzo de 2014 Duración de la prueba: 75 min Problema 1 (2 puntos) Examen parcial

Más detalles

Programación Basada en Eventos

Programación Basada en Eventos Programación Basada en Eventos La construcción de una GUI utiliza un modelo de programación basado en eventos. En este modelo el orden en el cual se ejecutan las instrucciones de un programa va a quedar

Más detalles

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente. HERENCIA (2ª parte) Lenguajes de Programación - Orientación a Objetos: Herencia 2ª parte 1 Object En Java todas las clases derivan de otra, aunque no se diga explícitamente. Object: Es el nombre de la

Más detalles

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED) Examen de Ejemplo Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED) Parte Teórica (2,5 puntos). La respuesta correcta se indica

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo Tema 4 Control de flujo Programación 2015-2016 Programación - Tema 4: Control de Flujo 1 Tema 4. Control de flujo Introducción. Estructuras condicionales. Estructuras de repetición. Programación - Tema

Más detalles

Estructura de datos y Programación

Estructura de datos y Programación Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de

Más detalles

PARTE TEÓRICA - TEST [2,5 PUNTOS]:

PARTE TEÓRICA - TEST [2,5 PUNTOS]: UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA 71901072 PROGRAMACIÓN ORIENTADA A OBJETOS (GRADO EN INGENIERÍA INFORMÁTICA / TECNOLOGÍAS DE LA INFORMACIÓN)

Más detalles

Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco.

Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco. Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco. El software que se muestra es un ejemplo sin pulir donde se muestra

Más detalles

Construir una Interfaz Gráfica

Construir una Interfaz Gráfica Construir una Interfaz Gráfica JAVA, permite al programador: -Diseñar y programar en interfaces gráficas de usuario en forma rápida y sencilla. -Cuenta con dos paquetes de clases predefinidos que brindan

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA ÁREA DE LENGUAJES Y SISTEMAS INFORMÁTICOS DEPARTAMENTO DE INFORMÁTICA E INGENIERÍA DE SISTEMAS ESCUELA DE INGENIERÍA Y ARQUITECTURA FUNDAMENTOS DE INFORMÁTICA 1ª CONVOCATORIA (16-junio-2011) Ejercicio

Más detalles

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON Una aplicación sin usar Formulario A continuación vamos a desarrollar una aplicación sencilla que permita calcular el área del triángulo dado los valores

Más detalles

Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI Ecapsulamiento, clases asociadas Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional

Más detalles

Aplicaciones gráficas en Java Librería Swing

Aplicaciones gráficas en Java Librería Swing Aplicaciones gráficas en Java Librería Swing Sumario: Breve introducción al paquete Swing Tipos de clases del paquete Definición y manejo de contenedores, diálogos y layouts Diseño mediante IDE (Eclipse)

Más detalles

Solucion al Examen de Fundamentos de Computadores y Lenguajes

Solucion al Examen de Fundamentos de Computadores y Lenguajes Solucion al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Junio 2006 1) Escribir una clase que permita almacenar una lista de jugadores

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica

Más detalles

E1. Práctica UF2406: El ciclo de vida del desarrollo de aplicaciones

E1. Práctica UF2406: El ciclo de vida del desarrollo de aplicaciones E1. Práctica UF2406: El ciclo de vida del desarrollo de aplicaciones CALCULADORA Se trata de implementar una aplicación que ofrezca el interfaz y el comportamiento de una calculadora sencilla. El interfaz

Más detalles

Introducción a Python Qué es Python?

Introducción a Python Qué es Python? Introducción a Python Qué es Python? Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Se trata de un lenguaje de programación

Más detalles

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Tema 7.- Fundamentos de la Programación Orientada a Objetos Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).

Más detalles

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +. APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje

Más detalles

Examen escrito de Programación 1

Examen escrito de Programación 1 Examen escrito de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 12 de septiembre de 2013 Disponer sobre la mesa en lugar visible un documento

Más detalles

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN EJERCICIO 1 (1.5 puntos) Diseñe un conjunto de casos de prueba adecuado para comprobar el funcionamiento de un método encargado de calcular la duración de una llamada telefónica. Entradas Hora de inicio

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Federico Peinado

Federico Peinado Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

Más detalles

Solución al Examen de Fundamentos de Computadores y Lenguajes

Solución al Examen de Fundamentos de Computadores y Lenguajes Solución al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Septiembre 2006 1) Se dispone de la siguiente clase enumerada. Escribir un método,

Más detalles

Programación Avanzada, curso 2011 Juan Manuel Fernández Ejemplo muy simple del uso de Tablas

Programación Avanzada, curso 2011 Juan Manuel Fernández Ejemplo muy simple del uso de Tablas Programación Avanzada, curso 2011 Juan Manuel Fernández Ejemplo muy simple del uso de Tablas import javax.swing.swingutilities; import java.awt.borderlayout; import javax.swing.jpanel; import javax.swing.jframe;

Más detalles

CONSTRUIR INTERFACES GRAFIC I AS D E USUARIO I O (GUI) I 1

CONSTRUIR INTERFACES GRAFIC I AS D E USUARIO I O (GUI) I 1 CONSTRUIR INTERFACES GRAFICAS DE USUARIO (GUI) 1 Un GUI se construye mediante componentes que se ubican en la pantalla. Los componentes se representan mediante objetos. La distribución de los componentes

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya ELEMENTOS BÁSICOS DE C++: DECLARACIÓN DE VARIABLES A través de operaciones aritméticas (suma, resta, etc.) y lógicas (por ejemplo, comparaciones) los programas manipulan datos tales como números y caracteres.

Más detalles

Programación de sistemas

Programación de sistemas Programación de sistemas Interfaces Gráficas I. Conceptos básicos II. Eventos Julio Villena Román MATERIALES BASADOS EN EL TRABAJO DE DIFERENTES AUTORES: José Jesús García Rueda,

Más detalles

INGRESAR DATOS CON UN CONTROL VISUAL EN JAVA. CLASE JTEXTFIELD Y MÉTODO GETTEXT. EJEMPLOS (CU00928C)

INGRESAR DATOS CON UN CONTROL VISUAL EN JAVA. CLASE JTEXTFIELD Y MÉTODO GETTEXT. EJEMPLOS (CU00928C) APRENDERAPROGRAMAR.COM INGRESAR DATOS CON UN CONTROL VISUAL EN JAVA. CLASE JTEXTFIELD Y MÉTODO GETTEXT. EJEMPLOS (CU00928C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha

Más detalles

Aplicaciones Java. Juan Manuel Fernández Peña Curso 2011, 2013

Aplicaciones Java. Juan Manuel Fernández Peña Curso 2011, 2013 Aplicaciones Java Juan Manuel Fernández Peña Curso 2011, 2013 Aplicación Una aplicación es una colección de clases y recursos adicionales, con un punto de inicio. El punto de inicio está dado por el método

Más detalles

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN INTRODUCCION Un arreglo es una colección de variables del mismo tipo, referidos por un nombre común. En Java, los arreglos tienen una o más dimensiones,

Más detalles

Componentes Swing. Las clases cuyo nombre comienza por J forman parte de Swing. Todas las demás están incluidas en AWT (Abstract Window Toolkit)

Componentes Swing. Las clases cuyo nombre comienza por J forman parte de Swing. Todas las demás están incluidas en AWT (Abstract Window Toolkit) Componentes Swing Las clases cuyo nombre comienza por J forman parte de Swing. Todas las demás están incluidas en AWT (Abstract Window Toolkit) Component es una clase abstracta que representa a cualquier

Más detalles

SEMINARIO DE DQL CON PHP Y MYSQL

SEMINARIO DE DQL CON PHP Y MYSQL SEMINARIO DE DQL CON PHP Y MYSQL Índice del Seminario Instalación del paquete XAMPP en Windows Instalación de directorios virtuales. Creación y ejecución de la primera pagina PHP. Fundamentos de PHP Estructura

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

Colas. 5.1 Implementación

Colas. 5.1 Implementación Capítulo 5 Colas Las colas al igual que las pilas son un tipo especial de listas en las cuales los elementos se insertan por un lado y se eliminan por el otro. Es decir se sacan en el mismo orden en que

Más detalles

Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A S GUI Objetos y s Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca

Más detalles

GOBIERNO DEL PRINCIPADO DE ASTURIAS VICECONSEJERÍA DE PRESUPUESTOS Y ADMINISTRACIÓN PÚBLICA

GOBIERNO DEL PRINCIPADO DE ASTURIAS VICECONSEJERÍA DE PRESUPUESTOS Y ADMINISTRACIÓN PÚBLICA MODULO COMÚN DE ALMACENAMIENTO TEMPORAL DE SOLICITUDES (MCAT) MANUAL DE USO Página 2 de 37 ÍNDICE ÍNDICE...2 1. CONTROL DEL DOCUMENTO...3 1.1. HISTÓRICO DE REVISIONES...3 2. INTRODUCCIÓN...4 3. CLASES

Más detalles

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

Java es un lenguaje orientado a objetos, por lo que los objetos (las clases) son los elementos más importantes en el diseño y desarrollo de una

Java es un lenguaje orientado a objetos, por lo que los objetos (las clases) son los elementos más importantes en el diseño y desarrollo de una EVENTOS EN JAVA Java es un lenguaje orientado a objetos, por lo que los objetos (las clases) son los elementos más importantes en el diseño y desarrollo de una aplicación. También podemos afirmar que Java

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

Tipos de programas en Java. Programación basada en eventos. Programación basada en eventos. Creación de una interfaz gráfico de usuario

Tipos de programas en Java. Programación basada en eventos. Programación basada en eventos. Creación de una interfaz gráfico de usuario Tipos de programas en Java Programación basada en eventos Aplicaciones Se pueden ejecutar directamente en un entorno Java Tipos Modo de consola -Interacción mediante teclado -Interfaz basado en texto Aplicaciones

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia

Más detalles

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C) APRENDERAPROGRAMAR.COM REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2039 Resumen:

Más detalles