[{"data":1,"prerenderedAt":1028},["ShallowReactive",2],{"navigation_docs":3,"-gui-eventos":298,"-gui-eventos-surround":1023},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":55,"body":300,"description":1016,"extension":1017,"links":1018,"meta":1019,"navigation":1020,"path":56,"seo":1021,"stem":57,"__hash__":1022},"docs\u002F2.gui\u002F09.eventos.md",{"type":301,"value":302,"toc":1011},"minimark",[303,307,312,326,332,636,645,649,658,763,924,934,938,944,1004,1007],[304,305,306],"p",{},"En esta sección, aprenderemos cómo manejar eventos en aplicaciones Swing. Los eventos son acciones que ocurren en la interfaz gráfica, como hacer clic en un botón o seleccionar un elemento de una lista. Para responder a estos eventos, utilizamos listeners, que son interfaces que definen métodos para manejar diferentes tipos de eventos.",[308,309,311],"h2",{"id":310},"actionlistener","ActionListener",[304,313,314,315,318,319,321,322,325],{},"La interfaz ",[316,317,311],"code",{}," es una de las interfaces más comunes para manejar eventos en Swing. Se utiliza principalmente para responder a acciones como hacer clic en un botón. Para implementar un ",[316,320,311],{},", debemos crear una clase que implemente esta interfaz y sobrescribir el método ",[316,323,324],{},"actionPerformed",".",[304,327,328,329,331],{},"Veamos un ejemplo de cómo usar ",[316,330,311],{}," con un botón:",[333,334,339],"pre",{"className":335,"code":336,"language":337,"meta":338,"style":338},"language-java shiki shiki-themes github-dark","import javax.swing.JButton;\nimport javax.swing.JFrame;\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\npublic class ButtonExample {\n    void main(String[] args) {\n        JFrame frame = new JFrame(\"Ejemplo de ActionListener\");\n        JButton button = new JButton(\"Haz clic aquí\");\n\n        \u002F\u002F Agregar ActionListener al botón\n        button.addActionListener(new ActionListener() {\n            @Override\n            public void actionPerformed(ActionEvent e) {\n                IO.println(\"¡Botón clickeado!\");\n            }\n        });\n\n        frame.add(button);\n        frame.setSize(300, 200);\n        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        frame.setVisible(true);\n    }\n}\n","java","",[316,340,341,354,362,370,378,385,401,426,450,470,475,482,502,511,531,547,553,559,564,576,598,609,624,630],{"__ignoreMap":338},[342,343,346,350],"span",{"class":344,"line":345},"line",1,[342,347,349],{"class":348},"snl16","import",[342,351,353],{"class":352},"s95oV"," javax.swing.JButton;\n",[342,355,357,359],{"class":344,"line":356},2,[342,358,349],{"class":348},[342,360,361],{"class":352}," javax.swing.JFrame;\n",[342,363,365,367],{"class":344,"line":364},3,[342,366,349],{"class":348},[342,368,369],{"class":352}," java.awt.event.ActionEvent;\n",[342,371,373,375],{"class":344,"line":372},4,[342,374,349],{"class":348},[342,376,377],{"class":352}," java.awt.event.ActionListener;\n",[342,379,381],{"class":344,"line":380},5,[342,382,384],{"emptyLinePlaceholder":383},true,"\n",[342,386,388,391,394,398],{"class":344,"line":387},6,[342,389,390],{"class":348},"public",[342,392,393],{"class":348}," class",[342,395,397],{"class":396},"svObZ"," ButtonExample",[342,399,400],{"class":352}," {\n",[342,402,404,407,410,413,416,419,423],{"class":344,"line":403},7,[342,405,406],{"class":348},"    void",[342,408,409],{"class":396}," main",[342,411,412],{"class":352},"(",[342,414,415],{"class":348},"String",[342,417,418],{"class":352},"[] ",[342,420,422],{"class":421},"s9osk","args",[342,424,425],{"class":352},") {\n",[342,427,429,432,435,438,441,443,447],{"class":344,"line":428},8,[342,430,431],{"class":352},"        JFrame frame ",[342,433,434],{"class":348},"=",[342,436,437],{"class":348}," new",[342,439,440],{"class":396}," JFrame",[342,442,412],{"class":352},[342,444,446],{"class":445},"sU2Wk","\"Ejemplo de ActionListener\"",[342,448,449],{"class":352},");\n",[342,451,453,456,458,460,463,465,468],{"class":344,"line":452},9,[342,454,455],{"class":352},"        JButton button ",[342,457,434],{"class":348},[342,459,437],{"class":348},[342,461,462],{"class":396}," JButton",[342,464,412],{"class":352},[342,466,467],{"class":445},"\"Haz clic aquí\"",[342,469,449],{"class":352},[342,471,473],{"class":344,"line":472},10,[342,474,384],{"emptyLinePlaceholder":383},[342,476,478],{"class":344,"line":477},11,[342,479,481],{"class":480},"sAwPA","        \u002F\u002F Agregar ActionListener al botón\n",[342,483,485,488,491,493,496,499],{"class":344,"line":484},12,[342,486,487],{"class":352},"        button.",[342,489,490],{"class":396},"addActionListener",[342,492,412],{"class":352},[342,494,495],{"class":348},"new",[342,497,498],{"class":396}," ActionListener",[342,500,501],{"class":352},"() {\n",[342,503,505,508],{"class":344,"line":504},13,[342,506,507],{"class":352},"            @",[342,509,510],{"class":348},"Override\n",[342,512,514,517,520,523,526,529],{"class":344,"line":513},14,[342,515,516],{"class":348},"            public",[342,518,519],{"class":348}," void",[342,521,522],{"class":396}," actionPerformed",[342,524,525],{"class":352},"(ActionEvent ",[342,527,528],{"class":421},"e",[342,530,425],{"class":352},[342,532,534,537,540,542,545],{"class":344,"line":533},15,[342,535,536],{"class":352},"                IO.",[342,538,539],{"class":396},"println",[342,541,412],{"class":352},[342,543,544],{"class":445},"\"¡Botón clickeado!\"",[342,546,449],{"class":352},[342,548,550],{"class":344,"line":549},16,[342,551,552],{"class":352},"            }\n",[342,554,556],{"class":344,"line":555},17,[342,557,558],{"class":352},"        });\n",[342,560,562],{"class":344,"line":561},18,[342,563,384],{"emptyLinePlaceholder":383},[342,565,567,570,573],{"class":344,"line":566},19,[342,568,569],{"class":352},"        frame.",[342,571,572],{"class":396},"add",[342,574,575],{"class":352},"(button);\n",[342,577,579,581,584,586,590,593,596],{"class":344,"line":578},20,[342,580,569],{"class":352},[342,582,583],{"class":396},"setSize",[342,585,412],{"class":352},[342,587,589],{"class":588},"sDLfK","300",[342,591,592],{"class":352},", ",[342,594,595],{"class":588},"200",[342,597,449],{"class":352},[342,599,601,603,606],{"class":344,"line":600},21,[342,602,569],{"class":352},[342,604,605],{"class":396},"setDefaultCloseOperation",[342,607,608],{"class":352},"(JFrame.EXIT_ON_CLOSE);\n",[342,610,612,614,617,619,622],{"class":344,"line":611},22,[342,613,569],{"class":352},[342,615,616],{"class":396},"setVisible",[342,618,412],{"class":352},[342,620,621],{"class":588},"true",[342,623,449],{"class":352},[342,625,627],{"class":344,"line":626},23,[342,628,629],{"class":352},"    }\n",[342,631,633],{"class":344,"line":632},24,[342,634,635],{"class":352},"}\n",[304,637,638,639,641,642,644],{},"En este ejemplo, hemos creado un botón y le hemos agregado un ",[316,640,311],{},". Cuando el botón es clickeado, se ejecuta el método ",[316,643,324],{},", que imprime un mensaje en la consola.",[308,646,648],{"id":647},"clases-anónimas-y-expresiones-lambda-vs-clases-separadas","Clases Anónimas y Expresiones Lambda v.s. Clases Separadas",[304,650,651,652,654,655,657],{},"En el ejemplo anterior, utilizamos una clase anónima para implementar el ",[316,653,311],{},". Esto es útil para mantener el código conciso cuando la implementación del listener es corta. Sin embargo, también podemos crear una clase separada que implemente ",[316,656,311],{},", especialmente si la lógica es más compleja o si queremos reutilizar el listener en varios lugares. Aquí hay un ejemplo de cómo hacerlo:",[333,659,661],{"className":335,"code":660,"language":337,"meta":338,"style":338},"import java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\npublic class MiActionListener implements ActionListener {\n\n    public MiActionListener() {\n\n    }\n\n    @Override\n    public void actionPerformed(ActionEvent e) {\n        IO.println(\"¡Botón activo desde clase separada!\");\n    }\n}\n",[316,662,663,669,675,679,695,699,708,712,716,720,727,741,755,759],{"__ignoreMap":338},[342,664,665,667],{"class":344,"line":345},[342,666,349],{"class":348},[342,668,369],{"class":352},[342,670,671,673],{"class":344,"line":356},[342,672,349],{"class":348},[342,674,377],{"class":352},[342,676,677],{"class":344,"line":364},[342,678,384],{"emptyLinePlaceholder":383},[342,680,681,683,685,688,691,693],{"class":344,"line":372},[342,682,390],{"class":348},[342,684,393],{"class":348},[342,686,687],{"class":396}," MiActionListener",[342,689,690],{"class":348}," implements",[342,692,498],{"class":396},[342,694,400],{"class":352},[342,696,697],{"class":344,"line":380},[342,698,384],{"emptyLinePlaceholder":383},[342,700,701,704,706],{"class":344,"line":387},[342,702,703],{"class":348},"    public",[342,705,687],{"class":396},[342,707,501],{"class":352},[342,709,710],{"class":344,"line":403},[342,711,384],{"emptyLinePlaceholder":383},[342,713,714],{"class":344,"line":428},[342,715,629],{"class":352},[342,717,718],{"class":344,"line":452},[342,719,384],{"emptyLinePlaceholder":383},[342,721,722,725],{"class":344,"line":472},[342,723,724],{"class":352},"    @",[342,726,510],{"class":348},[342,728,729,731,733,735,737,739],{"class":344,"line":477},[342,730,703],{"class":348},[342,732,519],{"class":348},[342,734,522],{"class":396},[342,736,525],{"class":352},[342,738,528],{"class":421},[342,740,425],{"class":352},[342,742,743,746,748,750,753],{"class":344,"line":484},[342,744,745],{"class":352},"        IO.",[342,747,539],{"class":396},[342,749,412],{"class":352},[342,751,752],{"class":445},"\"¡Botón activo desde clase separada!\"",[342,754,449],{"class":352},[342,756,757],{"class":344,"line":504},[342,758,629],{"class":352},[342,760,761],{"class":344,"line":513},[342,762,635],{"class":352},[333,764,766],{"className":335,"code":765,"language":337,"meta":338,"style":338},"import javax.swing.JButton;\nimport javax.swing.JFrame;\n\npublic class ButtonExampleWithSeparateClass {\n    void main(String[] args) {\n        JFrame frame = new JFrame(\"Ejemplo con Clase Separada\");\n        JButton button = new JButton(\"Haz clic aquí\");\n\n        \u002F\u002F Agregar ActionListener usando una clase separada\n        button.addActionListener(new MiActionListener(button, frame));\n\n        frame.add(button);\n        frame.setSize(300, 200);\n        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        frame.setVisible(true);\n    }\n}\n",[316,767,768,774,780,784,795,811,828,844,848,853,868,872,880,896,904,916,920],{"__ignoreMap":338},[342,769,770,772],{"class":344,"line":345},[342,771,349],{"class":348},[342,773,353],{"class":352},[342,775,776,778],{"class":344,"line":356},[342,777,349],{"class":348},[342,779,361],{"class":352},[342,781,782],{"class":344,"line":364},[342,783,384],{"emptyLinePlaceholder":383},[342,785,786,788,790,793],{"class":344,"line":372},[342,787,390],{"class":348},[342,789,393],{"class":348},[342,791,792],{"class":396}," ButtonExampleWithSeparateClass",[342,794,400],{"class":352},[342,796,797,799,801,803,805,807,809],{"class":344,"line":380},[342,798,406],{"class":348},[342,800,409],{"class":396},[342,802,412],{"class":352},[342,804,415],{"class":348},[342,806,418],{"class":352},[342,808,422],{"class":421},[342,810,425],{"class":352},[342,812,813,815,817,819,821,823,826],{"class":344,"line":387},[342,814,431],{"class":352},[342,816,434],{"class":348},[342,818,437],{"class":348},[342,820,440],{"class":396},[342,822,412],{"class":352},[342,824,825],{"class":445},"\"Ejemplo con Clase Separada\"",[342,827,449],{"class":352},[342,829,830,832,834,836,838,840,842],{"class":344,"line":403},[342,831,455],{"class":352},[342,833,434],{"class":348},[342,835,437],{"class":348},[342,837,462],{"class":396},[342,839,412],{"class":352},[342,841,467],{"class":445},[342,843,449],{"class":352},[342,845,846],{"class":344,"line":428},[342,847,384],{"emptyLinePlaceholder":383},[342,849,850],{"class":344,"line":452},[342,851,852],{"class":480},"        \u002F\u002F Agregar ActionListener usando una clase separada\n",[342,854,855,857,859,861,863,865],{"class":344,"line":472},[342,856,487],{"class":352},[342,858,490],{"class":396},[342,860,412],{"class":352},[342,862,495],{"class":348},[342,864,687],{"class":396},[342,866,867],{"class":352},"(button, frame));\n",[342,869,870],{"class":344,"line":477},[342,871,384],{"emptyLinePlaceholder":383},[342,873,874,876,878],{"class":344,"line":484},[342,875,569],{"class":352},[342,877,572],{"class":396},[342,879,575],{"class":352},[342,881,882,884,886,888,890,892,894],{"class":344,"line":504},[342,883,569],{"class":352},[342,885,583],{"class":396},[342,887,412],{"class":352},[342,889,589],{"class":588},[342,891,592],{"class":352},[342,893,595],{"class":588},[342,895,449],{"class":352},[342,897,898,900,902],{"class":344,"line":513},[342,899,569],{"class":352},[342,901,605],{"class":396},[342,903,608],{"class":352},[342,905,906,908,910,912,914],{"class":344,"line":533},[342,907,569],{"class":352},[342,909,616],{"class":396},[342,911,412],{"class":352},[342,913,621],{"class":588},[342,915,449],{"class":352},[342,917,918],{"class":344,"line":549},[342,919,629],{"class":352},[342,921,922],{"class":344,"line":555},[342,923,635],{"class":352},[304,925,926,927,930,931,933],{},"En este caso, hemos creado una clase ",[316,928,929],{},"MiActionListener"," que implementa ",[316,932,311],{},". Luego, en la clase principal, instanciamos esta clase y la pasamos al botón. Esto es especialmente útil si el listener tiene lógica compleja o necesita acceder a otros componentes de la interfaz.",[308,935,937],{"id":936},"otros-listeners-comunes","Otros Listeners Comunes",[304,939,940,941,943],{},"Además de ",[316,942,311],{},", Swing proporciona varios otros listeners para manejar diferentes tipos de eventos. Algunos de los más comunes incluyen:",[945,946,947,960],"table",{},[948,949,950],"thead",{},[951,952,953,957],"tr",{},[954,955,956],"th",{},"Listener",[954,958,959],{},"Descripción",[961,962,963,974,984,994],"tbody",{},[951,964,965,971],{},[966,967,968],"td",{},[316,969,970],{},"MouseListener",[966,972,973],{},"Maneja eventos relacionados con el mouse, como clics y movimientos.",[951,975,976,981],{},[966,977,978],{},[316,979,980],{},"KeyListener",[966,982,983],{},"Maneja eventos de teclado, como presionar y soltar teclas.",[951,985,986,991],{},[966,987,988],{},[316,989,990],{},"WindowListener",[966,992,993],{},"Maneja eventos relacionados con la ventana, como abrir y cerrar.",[951,995,996,1001],{},[966,997,998],{},[316,999,1000],{},"ItemListener",[966,1002,1003],{},"Maneja eventos de selección en componentes como listas y checkboxes.",[304,1005,1006],{},"Cada uno de estos listeners tiene métodos específicos que debemos implementar para manejar los eventos correspondientes. A medida que avancemos en el desarrollo de aplicaciones Swing, exploraremos cómo utilizar estos listeners para crear interfaces interactivas y responsivas.",[1008,1009,1010],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":338,"searchDepth":356,"depth":356,"links":1012},[1013,1014,1015],{"id":310,"depth":356,"text":311},{"id":647,"depth":356,"text":648},{"id":936,"depth":356,"text":937},"Aprende a manejar eventos en aplicaciones Swing utilizando ActionListener y otros listeners.","md",null,{"editButton":104},{"icon":25},{"title":55,"description":1016},"_SUeZsTxRlWLnmDbUX2kZeHyTZm2dtiuCWKJQo1Oawg",[1024,1026],{"title":51,"path":52,"stem":53,"description":1025,"children":-1},"Aprende sobre los diferentes elementos visuales que puedes utilizar en tus proyectos de desarrollo de interfaces gráficas.",{"title":59,"path":60,"stem":61,"description":1027,"icon":25,"children":-1},"Aprende a utilizar controles comunes en Java Swing como botones, etiquetas y campos de texto.",1775101370493]