[{"data":1,"prerenderedAt":656},["ShallowReactive",2],{"navigation_docs":3,"-personalizacion-personalizacion-inicial":298,"-personalizacion-personalizacion-inicial-surround":651},[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":80,"body":300,"description":644,"extension":645,"links":646,"meta":647,"navigation":648,"path":81,"seo":649,"stem":82,"__hash__":650},"docs\u002F3.personalizacion\u002F02.personalizacion-inicial.md",{"type":301,"value":302,"toc":639},"minimark",[303,307,312,320,463,473,476,480,487,625,628,632,635],[304,305,306],"p",{},"En esta sección, exploraremos cómo personalizar los componentes básicos de Swing para crear interfaces gráficas atractivas y funcionales. La personalización de los componentes es esencial para mejorar la experiencia del usuario y hacer que tu aplicación se destaque. A continuación, se presentan algunas técnicas y consejos para personalizar los componentes de Swing.",[308,309,311],"h2",{"id":310},"herencia-de-clases","Herencia de Clases",[304,313,314,315,319],{},"Una de las formas más comunes de personalizar los componentes de Swing es mediante la herencia de clases. Puedes crear tus propias clases que extiendan de las clases base de Swing para agregar funcionalidades adicionales o modificar el comportamiento de los componentes existentes. Por ejemplo, puedes crear una clase personalizada que extienda de ",[316,317,318],"code",{},"JButton"," para agregar un estilo específico o un comportamiento personalizado al botón.",[321,322,327],"pre",{"className":323,"code":324,"language":325,"meta":326,"style":326},"language-java shiki shiki-themes github-dark","import javax.swing.JButton;\nimport java.awt.Color;\n\npublic class CustomButton extends JButton {\n    public CustomButton(String text) {\n        super(text);\n        setBackground(Color.BLUE);\n        setForeground(Color.WHITE);\n        setFont(getFont().deriveFont(16f));\n    }\n}\n","java","",[316,328,329,342,350,357,379,397,407,416,425,451,457],{"__ignoreMap":326},[330,331,334,338],"span",{"class":332,"line":333},"line",1,[330,335,337],{"class":336},"snl16","import",[330,339,341],{"class":340},"s95oV"," javax.swing.JButton;\n",[330,343,345,347],{"class":332,"line":344},2,[330,346,337],{"class":336},[330,348,349],{"class":340}," java.awt.Color;\n",[330,351,353],{"class":332,"line":352},3,[330,354,356],{"emptyLinePlaceholder":355},true,"\n",[330,358,360,363,366,370,373,376],{"class":332,"line":359},4,[330,361,362],{"class":336},"public",[330,364,365],{"class":336}," class",[330,367,369],{"class":368},"svObZ"," CustomButton",[330,371,372],{"class":336}," extends",[330,374,375],{"class":368}," JButton",[330,377,378],{"class":340}," {\n",[330,380,382,385,387,390,394],{"class":332,"line":381},5,[330,383,384],{"class":336},"    public",[330,386,369],{"class":368},[330,388,389],{"class":340},"(String ",[330,391,393],{"class":392},"s9osk","text",[330,395,396],{"class":340},") {\n",[330,398,400,404],{"class":332,"line":399},6,[330,401,403],{"class":402},"sDLfK","        super",[330,405,406],{"class":340},"(text);\n",[330,408,410,413],{"class":332,"line":409},7,[330,411,412],{"class":368},"        setBackground",[330,414,415],{"class":340},"(Color.BLUE);\n",[330,417,419,422],{"class":332,"line":418},8,[330,420,421],{"class":368},"        setForeground",[330,423,424],{"class":340},"(Color.WHITE);\n",[330,426,428,431,434,437,440,443,445,448],{"class":332,"line":427},9,[330,429,430],{"class":368},"        setFont",[330,432,433],{"class":340},"(",[330,435,436],{"class":368},"getFont",[330,438,439],{"class":340},"().",[330,441,442],{"class":368},"deriveFont",[330,444,433],{"class":340},[330,446,447],{"class":402},"16f",[330,449,450],{"class":340},"));\n",[330,452,454],{"class":332,"line":453},10,[330,455,456],{"class":340},"    }\n",[330,458,460],{"class":332,"line":459},11,[330,461,462],{"class":340},"}\n",[304,464,465,466,469,470,472],{},"En este ejemplo, hemos creado una clase ",[316,467,468],{},"CustomButton"," que extiende de ",[316,471,318],{}," y personaliza su apariencia estableciendo un fondo azul, texto blanco y una fuente de tamaño 16. Esto permite reutilizar esta clase personalizada en toda la aplicación para mantener una apariencia consistente sin tener que configurar cada botón individualmente.",[304,474,475],{},"Recuerda que cada componente de Swing tiene su propia jerarquía de clases, por lo que puedes extender cualquier componente para personalizarlo según tus necesidades. La herencia de clases es una herramienta poderosa para crear componentes personalizados que se adapten a la estética y funcionalidad de tu aplicación.",[308,477,479],{"id":478},"uso-de-look-and-feel","Uso de Look and Feel",[304,481,482,483,486],{},"Otra forma de personalizar los componentes de Swing es mediante el uso de \"Look and Feel\". Swing proporciona varios estilos predefinidos que puedes aplicar a tu aplicación para cambiar la apariencia de los componentes. Puedes establecer el Look and Feel utilizando el método ",[316,484,485],{},"UIManager.setLookAndFeel()",".",[321,488,490],{"className":323,"code":489,"language":325,"meta":326,"style":326},"import javax.swing.UIManager;\nimport javax.swing.UnsupportedLookAndFeelException;\n\npublic class LookAndFeelExample {\n    public static void main(String[] args) {\n        try {\n            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\n        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {\n            e.printStackTrace();\n        }\n        \n        \u002F\u002F Resto de tu código para crear la interfaz gráfica\n    }\n}\n",[316,491,492,499,506,510,521,547,554,571,587,598,603,608,615,620],{"__ignoreMap":326},[330,493,494,496],{"class":332,"line":333},[330,495,337],{"class":336},[330,497,498],{"class":340}," javax.swing.UIManager;\n",[330,500,501,503],{"class":332,"line":344},[330,502,337],{"class":336},[330,504,505],{"class":340}," javax.swing.UnsupportedLookAndFeelException;\n",[330,507,508],{"class":332,"line":352},[330,509,356],{"emptyLinePlaceholder":355},[330,511,512,514,516,519],{"class":332,"line":359},[330,513,362],{"class":336},[330,515,365],{"class":336},[330,517,518],{"class":368}," LookAndFeelExample",[330,520,378],{"class":340},[330,522,523,525,528,531,534,536,539,542,545],{"class":332,"line":381},[330,524,384],{"class":336},[330,526,527],{"class":336}," static",[330,529,530],{"class":336}," void",[330,532,533],{"class":368}," main",[330,535,433],{"class":340},[330,537,538],{"class":336},"String",[330,540,541],{"class":340},"[] ",[330,543,544],{"class":392},"args",[330,546,396],{"class":340},[330,548,549,552],{"class":332,"line":399},[330,550,551],{"class":336},"        try",[330,553,378],{"class":340},[330,555,556,559,562,565,568],{"class":332,"line":409},[330,557,558],{"class":340},"            UIManager.",[330,560,561],{"class":368},"setLookAndFeel",[330,563,564],{"class":340},"(UIManager.",[330,566,567],{"class":368},"getSystemLookAndFeelClassName",[330,569,570],{"class":340},"());\n",[330,572,573,576,579,582,585],{"class":332,"line":418},[330,574,575],{"class":340},"        } ",[330,577,578],{"class":336},"catch",[330,580,581],{"class":340}," (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ",[330,583,584],{"class":392},"e",[330,586,396],{"class":340},[330,588,589,592,595],{"class":332,"line":427},[330,590,591],{"class":340},"            e.",[330,593,594],{"class":368},"printStackTrace",[330,596,597],{"class":340},"();\n",[330,599,600],{"class":332,"line":453},[330,601,602],{"class":340},"        }\n",[330,604,605],{"class":332,"line":459},[330,606,607],{"class":340},"        \n",[330,609,611],{"class":332,"line":610},12,[330,612,614],{"class":613},"sAwPA","        \u002F\u002F Resto de tu código para crear la interfaz gráfica\n",[330,616,618],{"class":332,"line":617},13,[330,619,456],{"class":340},[330,621,623],{"class":332,"line":622},14,[330,624,462],{"class":340},[304,626,627],{},"En este ejemplo, hemos establecido el Look and Feel del sistema operativo, lo que hará que los componentes de Swing se vean como los componentes nativos del sistema. También puedes elegir otros estilos predefinidos como \"Nimbus\" o \"Metal\" para darle a tu aplicación un aspecto diferente. El uso de Look and Feel es una forma rápida y sencilla de mejorar la apariencia de tu aplicación sin tener que personalizar cada componente individualmente. Sin embargo, ten en cuenta que algunos Look and Feel pueden no ser compatibles con todos los sistemas operativos, por lo que es importante probar tu aplicación en diferentes entornos para asegurarte de que se vea bien en todas partes, además de que el uso de Look and Feel puede afectar el rendimiento de tu aplicación, especialmente si utilizas un estilo que no es nativo del sistema operativo. Por lo tanto, es recomendable elegir un Look and Feel que sea compatible con la mayoría de los sistemas operativos y que no afecte negativamente el rendimiento de tu aplicación.",[308,629,631],{"id":630},"conclusión","Conclusión",[304,633,634],{},"La personalización de los componentes de Swing es esencial para crear interfaces gráficas atractivas y funcionales. Ya sea mediante la herencia de clases para crear componentes personalizados o utilizando Look and Feel para cambiar la apariencia general de tu aplicación, hay muchas formas de mejorar la experiencia del usuario y hacer que tu aplicación se destaque. Experimenta con diferentes técnicas de personalización para encontrar el estilo que mejor se adapte a tu aplicación y a las necesidades de tus usuarios. Recuerda que la personalización no solo se trata de la apariencia, sino también de la funcionalidad, por lo que es importante encontrar un equilibrio entre ambos aspectos para crear una aplicación que sea tanto atractiva como fácil de usar. ¡Diviértete personalizando tus componentes de Swing y creando interfaces gráficas únicas!",[636,637,638],"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 .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);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":326,"searchDepth":344,"depth":344,"links":640},[641,642,643],{"id":310,"depth":344,"text":311},{"id":478,"depth":344,"text":479},{"id":630,"depth":344,"text":631},"Aprende a personalizar los componentes básicos de Swing para crear interfaces gráficas atractivas y funcionales.","md",null,{"editButton":104},{"icon":83},{"title":80,"description":644},"f0WAm8-HPrJpfvFrH0TjEXvN4ynAlXSVyCPLHZdtc3M",[652,654],{"title":76,"path":77,"stem":78,"description":653,"children":-1},"Aprende sobre la jerarquía de clases en Java Swing y cómo se organizan los componentes gráficos en esta biblioteca.",{"title":85,"path":86,"stem":87,"description":655,"icon":83,"children":-1},"Descubre cómo aplicar temas y realizar personalizaciones avanzadas en los componentes de Swing para crear interfaces gráficas únicas y atractivas.",1775101371254]