Вы находитесь на странице: 1из 22

SESION02FORMULARIOS

TEMA01.INTEFAZGRAFICADEUSUARIOENJAVA

Swing.CuandoseempiezaautilizarSwing,seobservaqueJavaSofthadadoungranpasoadelante respectoalAWT.AhoralosComponentesdelinterfazgrficosonBeansyutilizanelnuevomodelo deDelegacindeEventosdeJava.SwingproporcionaunconjuntocompletodeComponentes,todos elloslightweight,esdecir,yanoseusancomponentes"peer"dependientesdelsistemaoperativo,y adems,SwingesttotalmenteescritoenJava.Todoelloredundaenunamayorfuncionalidaden manos del programador, y en la posibilidad de mejorar en gran medida la cosmtica de los interfacesgrficosdeusuario. Sonmuchaslasventajasqueofreceel usodeSwing.Porejemplo,lanavegacinconeltecladoes automtica,cualquieraplicacinSwingsepuedeutilizarsinratn,sintenerqueescribirniunalnea decdigoadicional.Lasetiquetasdeinformacin,o"tooltips",sepuedencrearconunasolalnea de cdigo. Adems, Swing aprovecha la circunstancia de que sus Componentes no estn renderizadossobrelapantallaporelsistemaoperativoparasoportarloquellaman"pluggablelook andfeel",esdecir,quelaaparienciadelaaplicacinseadaptadinmicamentealsistemaoperativo yplataformaenqueestcorriendo. Los Componentes Swing no soportan el modelo de Eventos de Propagacin, sino solamente el modelodeDelegacinincluidodesdeelJDK1.1;porlotanto,sisevanautilizarcomponentesSwing, sedebeprogramarexclusivamenteenelnuevomodelo. ElpasodeAWTaSwingesmuysencilloynohayquedescartarnadadeloquesehayahechoconel AWT.Afortunadamente,losprogramadoresdeSwinghantenidocompasiny,enlamayoradelos casosessuficienteconaadiruna"J"alcomponenteAWTparaqueseconviertaenuncomponente Swing. EsmuyimportanteentenderyasimilarelhechodequeSwingesunaextensindelAWT,ynoun sustituto encaminado a reemplazarlo. Aunque esto sea verdad en algunos casos en que los componentesdeSwingsecorrespondenacomponentesdelAWT;porejemplo,elJButtondeSwing puede considerarse como un sustituto del Button del AWT, y una vez que se usen los botones de Swing se puede tomar la decisin de no volver a utilizar jams un botn de AWT, pero, la funcionalidadbsicadeSwingdescansasobreelAWT.Todoestoesparaevitarqueellectorsalte directamente a Swing, ya que sera conveniente que primero entendiese el AWT y cmo Swing mejora al AWT. Por ahora, en este Tutorial solamente habr ejemplos de algunos de los componentesdeSwing,porquelosuyoesqueellectorconsultelainformacindeJavaSoft,incluso a pesar de que est en ingls, porque las figuras que proporcionan en su tutorial son muy ilustrativas. Aqu, se reproducirn algunas, quiz no las ms interesantes, pero s las ms descriptivas. Hay muchos libros en los que aparecen estas figuras, que se usan como material de rellenoparaqueparezcaqueellibrocontienemsinformacindelaqueenrealidadposee;esms, algunos de los libros que el autor ha hojeado (en ingls), no son ms que reproducciones de la documentacinqueJavaSoftproporcionagratuitamente. Paralacuestindeejemplos,losmsadecuadosyespectacularessonlosqueproporcionaJavaSoft con Swing, bajo la carpeta "examples" que se genera en la instalacin del JDK. Particularmente 1

SESION02FORMULARIOS

interesanteeslaaplicacinqueellosllamanSwingSet,cuyapantallainicialesunaventanaconuna veintena de pestaas que corresponden, cada una de ellas, a uno de los aspectos de Swing. Si el lector quiere husmear en los ejemplos, es particularmente interesante el "Slider" y, por supuesto, seleccionar en el men de "Options" las diferentes apariencias con que se pueden mostrar los paneles.

ComponentesSwing

1.Botones. Swingaadevariostiposdebotonesycambialaorganizacindelaseleccindecomponentes:todos losbotones,cajasdeseleccin,botonesdeseleccinycualquieropcindeunmendebenderivar deAbstractButton.Elejemplojava1404.java,muestralosdiferentestiposdebotonesqueestn disponiblesanteelprogramadoratravsdeSwing.

SESION02FORMULARIOS

importjava.awt.*;import java.awt.event.*;import com.sun.java.swing.*; publicclassjava1404extendsJPanel{publicjava1404(){add(newJButton("JButton"));add(new JToggleButton("JToggleButton"));add(newJCheckBox("JCheckBox"));add(newJRadioButton( "JRadioButton"));}

publicstaticvoidmain(Stringargs[]){ java1404panel=newjava1404(); JFrameventana=newJFrame(); ventana.getContentPane().add(panel,BorderLayout.CENTER);

ventana.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEventevt){ System.exit(0); } });

ventana.setSize(300,200); ventana.setTitle("TutorialdeJava,Swing"); ventana.setVisible(true); }}Lafigurasiguientecorrespondealacapturadelaejecucindelprogramaanterior,yreproduce laaparienciadeestostiposdebotonesimplementadosporSwing. ElJButtonpareceigualqueelbotnquehayenelAWT,perosepuedenhacermuchasmscosas conl.Todoslosbotones,adems,tienenahoralaposibilidaddeincorporarimgenesatravsdel 3

SESION02FORMULARIOS

objeto Icon, que se puede asignar a cualquier tipo de botn. E incluso se pueden asignar varios iconos a un mismo botn para visualizar los diferentes estados en que pueda encontrarse dicho botn,talcomomuestralafigurasiguiente.

2.Etiquetas Las etiquetas, junto con los botones y las cajas de seleccin, son uno de los componentes ms bsicosdetodointerfazdeusuario,independientementedequesehayanvistootroshastaahora,o ellectordifieradeestaclasificacin. Yel mssimpledetodoselloseslaetiqueta,quese limitaa presentartextosenpantalla.SwingintroducelaclaseJLabelparapresentarestostextosenpantalla; sinembargo,esmuchomsverstilquelaclasecorrespondientedelAWT.EnSwing,alderivarde JComponent, la clase JLabel implementa todas las caractersticas inherentes a los componentes Swing,comopuedenserlosaceleradoresdeteclado,bordes,ydems. SiseechaunvistazoalosconstructoresdelaclaseJLabel,sepuedeobservarclaramentequeSwing ofreceunAPImuchomsrico,presentandoconstructoresconhabilidadesnodisponiblesenelAWT. importjava.awt.*; importjava.awt.event.*; importcom.sun.java.swing.*;

classjava1403extendsJPanel{

publicjava1403(){ setLayout(newGridLayout(2,2)); JLabeletiq1=newJLabel(); etiq1.setText("Etiqueta1"); add(etiq1); 4

SESION02FORMULARIOS

JLabeletiq2=newJLabel("Etiqueta2"); etiq2.setFont(newFont("Helvetica",Font.BOLD,18)); add(etiq2);

Iconimagen=newImageIcon("star0.gif"); JLabeletiq3=newJLabel("Etiqueta3",imagen,SwingConstants.CENTER); etiq3.setVerticalTextPosition(SwingConstants.TOP); add(etiq3);

JLabeletiq4=newJLabel("Etiqueta4",SwingConstants.RIGHT); add(etiq4);}

publicstaticvoidmain(Stringargs[]){JFrameventana=newJFrame("TutorialdeJava,Swing");

ventana.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEventevt){ System.exit(0); }});ventana.getContentPane().add(newjava1403(),BorderLayout.CENTER);ventana.setSize( 300,150);ventana.setVisible(true); } } Lafigurasiguienteeselresultadodelaejecucindelprogramaanterior,dondesepuedeobservar queenlaEtiqueta2semuestraelcambiodefuentedecaracteresyenlaEtiqueta3seincluyeuna 5

SESION02FORMULARIOS

imagen.Enesteltimocaso,eltamaodelaimageneselquedeterminaeltamaomnimodela etiqueta.

Eltipodeletraconquesepresentaeltextodelaetiquetasepuedecambiarfcilmente,bastacon crear una nueva fuente de caracteres e invocar almtodo setFont() de la clase JLabel para que el cambio surta efecto. La fuente de caracteres puede ser cualquiera de las estndar, dentro de los tamaos soportados por la mquina virtual Java de la plataforma. El control de la fuente de caracteres utilizada para la etiqueta se puede realizar con una lnea de cdigo semejante a la siguiente: label.setFont(newFont("Dialog",Font.PLAIN,12)); Loscoloresdeltextoydelfondodelaetiquetatambinsepuedencambiardeformamuysencilla, mediantelainvocacindelosmtodossetForeground()ysetBackground().

3.ListasyCajasCombinadas. Las lista y cajas "combo" en Swing funcionan del mismo modo que lo hacan en el AWT, aunque tienen incrementada la funcionalidad a travs de algunas funciones de conveniencia que se han incorporado.Porejemplo,JListtieneunconstructoralquesepuedepasarunarraydeobjetosString paraquelospresente.Elejemplojava1407.java,muestraelusobsicodeestosdoscomponentes.

importjava.awt.*; importjava.awt.event.*; importcom.sun.java.swing.*; publicclassjava1407extendsJPanel{

publicjava1407(){ setLayout(newGridLayout(2,1)); 6

SESION02FORMULARIOS

JListlista=newJList(java1406.ids); add(newJScrollPane(lista));

JComboBoxcombo=newJComboBox();for(inti=0;i<100;i++) combo.addItem(Integer.toString(i));add(combo);}

publicstaticvoidmain(Stringargs[]){ java1407lista=newjava1407(); JFrameventana=newJFrame();

ventana.getContentPane().add(lista,BorderLayout.CENTER);

ventana.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEventevt){ System.exit(0); } });

ventana.setSize(200,200); ventana.setTitle("TutorialdeJava,Swing"); ventana.setVisible(true); }}Laimagensiguienteeselresultadoqueseobtieneenpantallatraslaejecucindelejemplo,y despusdehaberseleccionadounodeloselementosenlacajacomboyabrirlaparaproseguirla 7

SESION02FORMULARIOS

seleccindeotradelasopcionesoelementosquesepermiteelegir.

Una cosa que se ha mantenido con respecto a las listas de antes es que los objetos JList no proporcionanautomticamentelaposibilidaddescrollodesplazamientodelcontenido,queesuna cosaqueseesperaquehagaautomticamente,yresultaunpocochocante.Noobstante,elaadir scroll a listas es sumamente sencillo, ya que es suficiente con incluir la JList en un JScrollPane, y todoslosdetallesdeldesplazamientodelcontenidosernyamanejadosbajolaresponsabilidaddel sistema. Aunquelomsfrecuenteesquecadaelementoseleccionabledeunalistaseaunaetiqueta,Swing proporciona al componente JList tambin la posibilidad de presentar grficos, con o sin texto asociado, y tambin proporciona un control adicional de eventos para adecuarse a los que se producen en la manipulacin de este tipo de Componentes. Es decir, que en una lista tambin se puedenincluirinstanciasdeclasescomoJButton,JTextField,JCheckBox,einclusoJTextArea,quees uncomponentemultilnea. "Capitulo4\nIntroduccionalLenguajeJava", "Capitulo5\nConceptosBasicosdeJava", "Capitulo6\nProgramasBasicosenJava", "Capitulo7\nElDepuradordeJava", "Capitulo8\nClasesJava","Capitulo9\nExcepcionesenJava" Cadavalorincluyeelcarcterdenuevalnea,\n,paraforzarelsaltodelneaenmediodeltexto.

classMiRendererDeListaextendsJTextAreaimplementsListCellRenderer{

SESION02FORMULARIOS

publicComponentgetListCellRendererComponent( JListlista,Objectvalor,intindice, booleanseleccionado,booleanconFoco){ setBorder(newBevelBorder(BevelBorder.RAISED)); //Presentaeltextcorrespondientealitem setText(valor.toString()); //Pintaenloscoloresindicadosyconlafuenteseleccionada... if(seleccionado){

//..enelcasodeunitemmarcado(rojo/blanco) setBackground(Color.red); setForeground(Color.white); } else{ //..enelcasodeunitemnomarcado(gris/negro) setBackground(Color.lightGray); setForeground(Color.black); }return( this);}} El cdigo es bastante simple, y la parte ms interesante es la correspondiente a la clase anidada MiRendererDeLista, reproducido antes, que implementa un controlador diferente para cada celda de la lista, extendiendo en este caso a JTextArea en lugar de JLabel, como suele ser habitual. El resultadodelaejecucindelejemploeselquemuestralafigura.

SESION02FORMULARIOS

AunqueelcomponenteJTextAreatambintienesuslimitaciones,comosonelnopermitirelusode grficos, se puede observar que las posibilidades que se presentan al programador se han visto tremendamente incrementadas con la inclusin de este tipo de Componente y con las nuevas caractersticasqueproporcionaSwing.Enestecaso,inclusoesposiblehacerquelaalturadelacelda estrecortada,enelcasodeutilizarfuentesdecaracteresmuygrandes,debidoaquelaalturade cada uno de los elementos seleccionables de la lista se determina en el momento en que son construidos. 4.Mens LosmensestnmuchomejordesarrolladosysonmsflexiblesenSwingquelosqueseencuentran habitualmenteenotrasherramientas,incluyendopanelesyapplets.Lasintaxisparautilizarlosesla misma que en el AWT, y se conserva el mismo problema que tambin presentan los mens en el AWT,esdecir,quehayquecodificarlosmensdirectamenteynohaysoportepara,porejemplo, recursos;que,entreotrascosas,facilitaralaconversinentrelenguajesdelostextosdelosmens. As que, hay veces en que el cdigo se hace demasiado largo y feo. En el ejemplo siguiente, java1411.java, se intenta dar un paso hacia la resolucin de este problema colocando toda la informacin de cada men en un array de elementos de tipo Object de dos dimensiones, para facilitarlaintroduccindecualquiercosaenelarray.Estearrayestorganizadodetalformaquela primera fila representa el nombre del men y las siguientes filas representan los elementos u opcionesdelmenysuscaractersticas.Lasfilasdelarraynotienenporqueseruniformes,porque el cdigo sabe perfectamente donde se encuentra, as que no importa que las filas sean completamentediferentes. importjava.awt.*; importjava.awt.event.*; importcom.sun.java.swing.*; publicclassjava1411extendsJPanel{staticfinalBooleanbT= newBoolean(true);staticfinalBooleanbF=newBoolean(false );staticButtonGroupgrupoBotones; 10

SESION02FORMULARIOS

//Clasequeseutilizaparacrearlosdistintostiposdemensquese //vaapresentarenlaventana staticclassTipoMenu{ TipoMenu(inti){} };

staticfinalTipoMenumi=newTipoMenu(1);//Menconelementosnormalesstaticfinal TipoMenucb=newTipoMenu(2);//MenconcajasdeseleccinstaticfinalTipoMenurb=new TipoMenu(3);//MenconbotonesderadioJTextFieldtxt=newJTextField(10);JLabellbl=new JLabel("IconoSeleccionado",java1410.imgs[0], JLabel.CENTER);ActionListeneral1= newActionListener(){publicvoidactionPerformed(ActionEvent evt){txt.setText(((JMenuItem)evt.getSource()).getText()); } }; ActionListeneral2=newActionListener(){ publicvoidactionPerformed(ActionEventevt){ JMenuItemmi=(JMenuItem)evt.getSource(); lbl.setText(mi.getText()); lbl.setIcon(mi.getIcon()); }};//Enestasestrcuturassealmacenaslosdatosdelosmenscomosise//trataradelostpicos recursosdeXpublicObjectmenuArchivo[][]={ 11

SESION02FORMULARIOS

//Nombredelmenyteclarpidaasociada {"Archivo",newCharacter('A')}, //Nombre,tipo,teclarpida,receptorasociado,habilitadoono //paracadaunodeloselementosdelmen {"Nuevo",mi,newCharacter('N'),al1,bT}, {"Abrir",mi,newCharacter('b'),al1,bT}, {"Guardar",mi,newCharacter('G'),al1,bF}, {"Guardarcomo...",mi,newCharacter('c'),al1,bF}, {null},//Separador {"Salir",mi,newCharacter('S'),al1,bT}, }; publicObjectmenuEdicion[][]={//Nombredelmenyteclarpidaasociada{"Edicion",new Character('E')},//Nombre,tipo,teclarpida,receptorasociado,habilitadoono{"Cortar",mi,new Character('t'),al1,bT},{"Copiar",mi,newCharacter('C'),al1,bT},{"Pegar",mi,new Character('P'),al1,bT},{null},//Separator{"SeleccionarTodo",mi,newCharacter('S'),al1,bT}, }; publicObjectmenuIconos[][]={ //Nombredelmenyteclarpidaasociada {"Iconos",newCharacter('I')}, //Seleaadeunltimoelementoopcionalquecorrespondeal //iconoquesepresentaenmediodelaventana {"Icono0",rb,newCharacter('0'),al2,bT,java1410.imgs[0]}, {"Icono1",rb,newCharacter('1'),al2,bT,java1410.imgs[1]}, 12

SESION02FORMULARIOS

{"Icono2",rb,newCharacter('2'),al2,bT,java1410.imgs[2]}, {"Icono3",rb,newCharacter('3'),al2,bT,java1410.imgs[3]}, {"Icono4",rb,newCharacter('4'),al2,bT,java1410.imgs[4]}, }; publicObjectmenuOpciones[][]={//Nombredelmenyteclarpidaasociada{"Opciones",new Character('O')},//Nombre,tipo,teclarpida,receptorasociado,habilitadoono{"Opcion 1",cb,newCharacter('1'),al1,bT},{"Opcion2",cb,newCharacter('2'),al1,bT}, }; publicObjectmenuAyuda[][]={//Nombredelmenyteclarpidaasociada{"Ayuda",new Character('y')},//Nombre,tipo,teclarpida,receptorasociado,habilitadoono{"Indice",mi,new Character('I'),al1,bT},{"Contenido",mi,newCharacter('C'),al1,bT},{null},//Separator{"Acerca de...",mi,newCharacter('A'),al1,bT}, }; publicObjectbarraMenu[]={ menuArchivo,menuEdicion,menuIconos,menuOpciones,menuAyuda,};

staticpublicJMenuBarcreaMenuBarra(ObjectbarraMenuDato[]){JMenuBar barraMenu=newJMenuBar();for(inti=0;i<barraMenuDato.length;i++) barraMenu.add(creaMenu((Object[][])barraMenuDato[i]));return( barraMenu);}

staticpublicJMenucreaMenu(Object[][]menuDato){JMenumenu=newJMenu();

13

SESION02FORMULARIOS

menu.setText((String)menuDato[0][0]); menu.setMnemonic(((Character)menuDato[0][1]).charValue()); grupoBotones=newButtonGroup(); for(inti=1;i<menuDato.length;i++){ if(menuDato[i][0]==null) menu.add(newJSeparator()); else menu.add(creaMenuItem(menuDato[i])); } return(menu); }

staticpublicJMenuItemcreaMenuItem(Object[]dato){JMenuItemm=null; TipoMenutipo=(TipoMenu)dato[1];

if(tipo==mi)m=newJMenuItem();elseif(tipo==cb)m= newJCheckBoxMenuItem(); elseif(tipo==rb){ m=newJRadioButtonMenuItem(); grupoBotones.add(m); } 14

SESION02FORMULARIOS

m.setText((String)dato[0]); m.setMnemonic(((Character)dato[2]).charValue()); m.addActionListener((ActionListener)dato[3]); m.setEnabled(((Boolean)dato[4]).booleanValue()); //Yahoraelcasoopcionaldelosiconos if(dato.length==6) m.setIcon((Icon)dato[5]);return(m);}

java1411(){setLayout(newBorderLayout());add(creaMenuBarra(barraMenu ),BorderLayout.NORTH);JPanelp=newJPanel();p.setLayout(newBorderLayout());p.add( txt,BorderLayout.NORTH);p.add(lbl,BorderLayout.CENTER); add(p,BorderLayout.CENTER); }

publicstaticvoidmain(Stringargs[]){ java1411panel=newjava1411(); JFrameventana=newJFrame();

ventana.getContentPane().add(panel,BorderLayout.CENTER);

ventana.addWindowListener(new WindowAdapter(){ 15

SESION02FORMULARIOS

publicvoidwindowClosing( WindowEventevt){ System.exit(0); } }); ventana.setSize(300,200);

ventana.setTitle("TutorialdeJava,Swing"); ventana.setVisible(true); } } Laintencindelejemploanteriorespermitiralprogramadorelusodetablassimplesque representenacadamen,envezdequetengaqueteclearlneasenterasparalaconstruccinde esosmens.Cadatablageneraunmen,figurandoenlaprimerafilaelnombredelmenyel aceleradordetecladoyenlassiguienteslosdatoscorrespondientesacadaopcindelmen,que son:lacadenadecaracteresquesecolocarcomoopcin,eltipodeopcindequesetrata,latecla aceleradora,elreceptordeeventosdetipoActionquesedispararcuandolaopcinsea seleccionaday,finalmente,unindicadorparasabersilaopcinesthabilitadaono.Siunafila empiezaporuncarcternulo,setratarcomounseparador. Paraevitarlatediosacreacindemltiplesobjetosbooleanosybanderas,sehancreadolosvalores estticosalcomienzodelaclase,bTybF,pararepresentarlosbooleanosydiferentesobjetosdela clase TipoMenu para describir las opciones u elementos normales del men (mi), elementos con cajas de seleccin (cb) y elementos de seleccin nica o botones de radio (rb). Hay que tener en cuentaqueunarraydeObjectpuedecontenersolamenteobjetosynovaloresprimitivos,porloque nosepuedeusarintsinoInteger,etc.

16

SESION02FORMULARIOS

Elejemplo,cuyaimagenenejecucinreproducelafiguraanterior,tambinmuestracomoJLabelsy JMenuItems,ysusdescendientes,puedenmanejariconos.UnobjetoIconescolocadoenJLabela travs de su constructor y cambiado cuando el correspondiente elemento del men est seleccionado. ElarraybarraMenuestordenadodelamismaformaquesequierequeaparezcanloselementosen la barra. Se puede pasar este array al mtodo creaMenuBarra(), que ya lo divide en los arrays individuales de datos del men, pasando cada uno de estos ltimos al mtodo creaMenu(). Este mtodo,porsuparte,cogelaprimeralneadelmenycreaunobjetoJMenuapartirdeella,luego invoca al mtodo creaMenuItem() para cada una de las siguientes lneas del array. Finalmente, el mtodocreaMenuItem()chequeatodalalneaydeterminaeltipodemenysusatributos,creando el elemento o item que corresponda. Al final, como se puede comprobar en el constructor del ejemplo, java1411(), para crear un men desde estas tablas, es suficiente con la invocacin del constructordelaforma: creaMenuBarra(barraMenu); yyatodosemanejadeformarecursiva. Enelejemplonosetienenencuentalosmensencascada,peroellectoryaestarencondiciones deaadirestacaractersticaalejemploencasodenecesitarla.

MensPopup La implementacin de JPopupMenu resulta un tanto extraa: antes de nada hay que llamar al mtodoenableEvents()yseleccionarloseventosdelratn,envezdeutilizarunreceptordeeventos comoseradeesperar.Esdecir,esposibleaadirunreceptordeeventosdelratn,peroelevento asociado, MouseEvent, no es capaz de devolver true desde el mtodo isPopupTrigger(); aunque tambinpuedequeseaporqueelJDKtodavaestenfasebeta;perovamos,elcomportamientoes ciertamenteraro.

antelallegadadeleventocorrespondientealaactivacindelmen.

17

SESION02FORMULARIOS

importjava.awt.*;importjava.awt.event.*;import com.sun.java.swing.*;

publicclassjava1412extendsJPanel{JPopupMenupopup=new JPopupMenu();JTextFieldtxt=newJTextField(10);

publicjava1412(){ add(txt);

ActionListeneral=newActionListener(){ publicvoidactionPerformed(ActionEventevt){ txt.setText(((JMenuItem)evt.getSource()).getText()); } };

JMenuItemelemento=newJMenuItem("Carpanta"); elemento.addActionListener(al); popup.add(elemento); elemento=newJMenuItem("Rompetechos"); elemento.addActionListener(al); popup.add(elemento); elemento=newJMenuItem("Otilio"); 18

SESION02FORMULARIOS

elemento.addActionListener(al); popup.add(elemento); popup.addSeparator(); elemento=newJMenuItem("Mortadelo"); elemento.addActionListener(al); popup.add(elemento); enableEvents(AWTEvent.MOUSE_EVENT_MASK); }

protectedvoidprocessMouseEvent(MouseEventevt){if( evt.isPopupTrigger())popup.show( evt.getComponent(),evt.getX(),evt.getY());elsesuper.processMouseEvent( evt);}

publicstaticvoidmain(Stringargs[]){JFrameframe=newJFrame("TutorialdeJava,Swing");

frame.addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEventevt){ System.exit(0); } });

frame.getContentPane().add(newjava1412(),BorderLayout.CENTER); 19

SESION02FORMULARIOS

frame.setSize(200,150); frame.setVisible(true); } } ElmismoActionListenereselqueseaadeacadaJMenuItem,quecogeeltextodelaetiquetadel menylainsertaenelJTextField.

5.DilogosPredefinidos Swing tambin proporciona nuevos modelos de dilogos predefinidos del sistema, como son en dilogo de seleccin de colores, el dilogo de seleccin de ficheros, dilogos de aviso, error y confirmacin, y algunos ms. La apariencia es muy distinta a la que se presentaba en el AWT en algunoscasos,porejemploenlaseleccindeficheros. Laventanaquepermitelaseleccindeficheros,sueleserunaventanamodal,yaqueloscambios que se produzcan en ella, o la seleccin que se haga, repercutir en el funcionamiento de la aplicacingeneral. Normalmente, la ventana de seleccin de ficheros se utiliza para presentar una lista de ficheros y permitiralusuarioseleccionarculdeellosdebeabrirlaaplicacin;o,porelcontrario,permitiral usuariolaintroduccindeunnombreoseleccindelficheroconquesequierensalvardatos. ElobjetoJFileChoosernorealizaningunadeestasacciones,esdecir,noabrenisalvanada,sinoque selimitaasleccionarelnombredelficheroconelquesedesearealizarlaaccin;esresponsabilidad delprogramaelllevaracabolaaperturadelficheroolagrabacindedatos.

Adems,resultamuysencilloincorporarvisores delosdistintostiposdeficheros,ocambiarlos iconosqueindicanelcontenidodelosficheros, 20

SESION02FORMULARIOS

etc.importjava.awt.event.*;import com.sun.java.swing.*;publicclassjava1420 extendsJFrameimplementsActionListener{ publicjava1420(){JButtonboton=newJButton( "MuestraVentana");getContentPane().add( boton,"Center");pack(); boton.addActionListener(this);}publicvoid actionPerformed(ActionEventevt){intres= JOptionPane.showConfirmDialog(this,"Responda YesoNo","TutorialdeJava, Swing",JOptionPane.YES_NO_OPTION);String respuesta=null;

if(res==JOptionPane.YES_OPTION) respuesta="Si"; else respuesta="No"; System.out.println(Respuesta:+respuesta); }

publicstaticvoidmain(Stringargs[]){ newjava1420().setVisible(true); } } Siseejecutaelprogramaanterior,laimagenqueapareceenlapantallacorrespondealaventanade dilogoquevaapresentarunmensajeydosbotones,unoparaconfirmacin,encuyocasodevuelve elPanelcomorespuestalaconstanteYES_OPTION,yotroparaladesestimacin.

21

SESION02FORMULARIOS

22

Вам также может понравиться