[{"data":1,"prerenderedAt":718},["ShallowReactive",2],{"navigation_docs":3,"-personalizacion-theme-start":298,"-personalizacion-theme-start-surround":713},[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":93,"body":300,"description":706,"extension":707,"links":708,"meta":709,"navigation":710,"path":94,"seo":711,"stem":95,"__hash__":712},"docs\u002F3.personalizacion\u002F05.theme-start.md",{"type":301,"value":302,"toc":699},"minimark",[303,307,312,315,375,378,382,385,432,436,439,446,590,593,602,606,617,623,685,688,692,695],[304,305,306],"p",{},"En esta sección, exploraremos cómo definir los aspectos básicos de un tema personalizado en Swing. Un tema bien diseñado puede mejorar significativamente la apariencia y la experiencia del usuario de tu aplicación. A continuación, se presentan los elementos clave que debes considerar al crear tu propio tema.",[308,309,311],"h2",{"id":310},"creemos-la-estructura-del-tema","Creemos la Estructura del Tema",[304,313,314],{},"Como hemos visto en el punto anterior, un tema en Swing generalmente consta de varios paquetes que contienen diferentes aspectos de la personalización. Para comenzar, crearemos la estructura básica de nuestro tema personalizado.",[316,317,322],"pre",{"className":318,"code":319,"language":320,"meta":321,"style":321},"language-plaintext shiki shiki-themes github-dark","mytheme\u002F\n├── colors\u002F\n├── fonts\u002F\n├── icons\u002F\n├── styles\u002F\n├── layouts\u002F\n├── behaviors\u002F\n└── themes\u002F\n","plaintext","",[323,324,325,333,339,345,351,357,363,369],"code",{"__ignoreMap":321},[326,327,330],"span",{"class":328,"line":329},"line",1,[326,331,332],{},"mytheme\u002F\n",[326,334,336],{"class":328,"line":335},2,[326,337,338],{},"├── colors\u002F\n",[326,340,342],{"class":328,"line":341},3,[326,343,344],{},"├── fonts\u002F\n",[326,346,348],{"class":328,"line":347},4,[326,349,350],{},"├── icons\u002F\n",[326,352,354],{"class":328,"line":353},5,[326,355,356],{},"├── styles\u002F\n",[326,358,360],{"class":328,"line":359},6,[326,361,362],{},"├── layouts\u002F\n",[326,364,366],{"class":328,"line":365},7,[326,367,368],{},"├── behaviors\u002F\n",[326,370,372],{"class":328,"line":371},8,[326,373,374],{},"└── themes\u002F\n",[304,376,377],{},"Cada carpeta representará un aspecto diferente de la personalización que abordaremos en las siguientes secciones.",[308,379,381],{"id":380},"roles-y-responsabilidades","Roles y Responsabilidades",[304,383,384],{},"Antes de comenzar a definir los aspectos específicos de nuestro tema, es importante asignar roles y responsabilidades para cada paquete. Esto nos ayudará a mantener una organización clara y a asegurarnos de que cada aspecto del tema esté bien definido.",[386,387,388,396,402,408,414,420,426],"ul",{},[389,390,391,395],"li",{},[392,393,394],"strong",{},"colors",": Este paquete se encargará de definir la paleta de colores que se utilizará en los componentes de la interfaz gráfica. Aquí es donde estableceremos los colores primarios, secundarios, de fondo y de texto que darán vida a nuestro tema.",[389,397,398,401],{},[392,399,400],{},"fonts",": En este paquete, definiremos las fuentes y tamaños de texto que se utilizarán en los componentes. Esto incluye la fuente principal para el texto general, así como fuentes específicas para títulos, botones y otros elementos.",[389,403,404,407],{},[392,405,406],{},"icons",": Este paquete contendrá los iconos utilizados en botones, menús y otros elementos gráficos. Los iconos son una parte importante de la personalización, ya que pueden mejorar la usabilidad y la estética de tu aplicación.",[389,409,410,413],{},[392,411,412],{},"styles",": Aquí definiremos estilos específicos para componentes individuales, como botones, etiquetas y cuadros de texto. Esto nos permitirá personalizar la apariencia de cada componente de manera más detallada, estableciendo propiedades como bordes, sombras y efectos visuales.",[389,415,416,419],{},[392,417,418],{},"layouts",": Este paquete se encargará de configurar la disposición y el diseño de los componentes en la interfaz gráfica. Aquí definiremos cómo se organizan los componentes en la ventana, utilizando diferentes tipos de layout managers para lograr la apariencia deseada.",[389,421,422,425],{},[392,423,424],{},"behaviors",": En este paquete, estableceremos comportamientos personalizados para los componentes, como animaciones o interacciones específicas. Esto nos permitirá agregar dinamismo a nuestra aplicación y mejorar la experiencia del usuario.",[389,427,428,431],{},[392,429,430],{},"themes",": Finalmente, este paquete agrupará todos los paquetes anteriores para formar un tema completo que pueda ser aplicado a la aplicación. Aquí definiremos la clase principal del tema que se encargará de cargar y aplicar todos los aspectos de personalización definidos en los otros paquetes.",[308,433,435],{"id":434},"roles-en-colores-material-design-3","Roles en Colores (Material Design 3)",[304,437,438],{},"En el contexto de la personalización de temas, los colores juegan un papel fundamental en la creación de una apariencia atractiva y coherente. Material Design 3, la última versión del sistema de diseño de Google, introduce una serie de roles de color que pueden ayudarte a definir tu paleta de colores de manera efectiva. A continuación, se presentan algunos de los roles de color más importantes en Material Design 3:",[304,440,441],{},[442,443],"img",{"alt":444,"src":445},"material-colors.png","theme\u002Fmaterial-colors.png",[447,448,449,466],"table",{},[450,451,452],"thead",{},[453,454,455,461],"tr",{},[456,457,458],"th",{},[392,459,460],{},"Rol de Color",[456,462,463],{},[392,464,465],{},"Descripción",[467,468,469,480,490,500,510,520,530,540,550,560,570,580],"tbody",{},[453,470,471,477],{},[472,473,474],"td",{},[392,475,476],{},"Primary",[472,478,479],{},"El color principal que se utiliza para elementos destacados y acciones principales.",[453,481,482,487],{},[472,483,484],{},[392,485,486],{},"Primary Variant",[472,488,489],{},"Una variante del color primario que se utiliza para proporcionar contraste y variedad en la interfaz gráfica.",[453,491,492,497],{},[472,493,494],{},[392,495,496],{},"Secondary",[472,498,499],{},"El color secundario que se utiliza para elementos secundarios y acciones menos importantes.",[453,501,502,507],{},[472,503,504],{},[392,505,506],{},"Background",[472,508,509],{},"El color de fondo que se utiliza para la mayoría de los componentes y áreas de la interfaz gráfica.",[453,511,512,517],{},[472,513,514],{},[392,515,516],{},"Surface",[472,518,519],{},"El color de superficie que se utiliza para componentes como tarjetas, menús y diálogos.",[453,521,522,527],{},[472,523,524],{},[392,525,526],{},"Error",[472,528,529],{},"El color que se utiliza para indicar errores o estados de alerta.",[453,531,532,537],{},[472,533,534],{},[392,535,536],{},"On Primary",[472,538,539],{},"El color que se utiliza para el texto y los iconos que se muestran sobre el color primario.",[453,541,542,547],{},[472,543,544],{},[392,545,546],{},"On Secondary",[472,548,549],{},"El color que se utiliza para el texto y los iconos que se muestran sobre el color secundario.",[453,551,552,557],{},[472,553,554],{},[392,555,556],{},"On Background",[472,558,559],{},"El color que se utiliza para el texto y los iconos que se muestran sobre el color de fondo.",[453,561,562,567],{},[472,563,564],{},[392,565,566],{},"On Surface",[472,568,569],{},"El color que se utiliza para el texto y los iconos que se muestran sobre el color de superficie.",[453,571,572,577],{},[472,573,574],{},[392,575,576],{},"On Error",[472,578,579],{},"El color que se utiliza para el texto y los iconos que se muestran sobre el color de error.",[453,581,582,587],{},[472,583,584],{},[392,585,586],{},"Disabled",[472,588,589],{},"El color que se utiliza para indicar componentes deshabilitados o inactivos.",[304,591,592],{},"Puedes consultar la documentación oficial de Material Design 3 para obtener más información sobre los roles de color y cómo utilizarlos en tu tema personalizado. Al definir tu paleta de colores utilizando estos roles, podrás crear una apariencia coherente y atractiva para tu aplicación, mejorando la experiencia del usuario y haciendo que tu aplicación se destaque.",[304,594,595],{},[596,597,601],"a",{"href":598,"rel":599},"https:\u002F\u002Fm3.material.io\u002Fstyles\u002Fcolor\u002Froles",[600],"nofollow","Material Design 3 - Color Roles",[308,603,605],{"id":604},"definición-de-colores","Definición de Colores",[304,607,608,609,612,613,616],{},"El primer paso para crear un tema personalizado es definir la paleta de colores que se utilizará en los componentes de la interfaz gráfica. Puedes crear un archivo ",[323,610,611],{},"colors.properties"," dentro de la carpeta ",[323,614,615],{},"colors\u002F"," para almacenar los colores que deseas utilizar.",[304,618,619,620,622],{},"En el caso de Java Swing, puedes definir los colores utilizando el formato hexadecimal. Aquí tienes un ejemplo de cómo podría verse el archivo ",[323,621,611],{},":",[316,624,628],{"className":625,"code":626,"language":627,"meta":321,"style":321},"language-java shiki shiki-themes github-dark","public class MyThemeColors {\n    public static final Color PRIMARY_COLOR = new Color(0x3498DB);\n}\n","java",[323,629,630,647,680],{"__ignoreMap":321},[326,631,632,636,639,643],{"class":328,"line":329},[326,633,635],{"class":634},"snl16","public",[326,637,638],{"class":634}," class",[326,640,642],{"class":641},"svObZ"," MyThemeColors",[326,644,646],{"class":645},"s95oV"," {\n",[326,648,649,652,655,658,661,664,667,670,673,677],{"class":328,"line":335},[326,650,651],{"class":634},"    public",[326,653,654],{"class":634}," static",[326,656,657],{"class":634}," final",[326,659,660],{"class":645}," Color PRIMARY_COLOR ",[326,662,663],{"class":634},"=",[326,665,666],{"class":634}," new",[326,668,669],{"class":641}," Color",[326,671,672],{"class":645},"(",[326,674,676],{"class":675},"sDLfK","0x3498DB",[326,678,679],{"class":645},");\n",[326,681,682],{"class":328,"line":341},[326,683,684],{"class":645},"}\n",[304,686,687],{},"En este ejemplo, hemos definido un color primario utilizando su valor hexadecimal. Puedes agregar más colores a este archivo para definir tu paleta completa, incluyendo colores secundarios, de fondo, de texto y cualquier otro color que necesites para tu tema personalizado.",[308,689,691],{"id":690},"conclusión","Conclusión",[304,693,694],{},"Definir los aspectos básicos de un tema personalizado en Swing es el primer paso para crear una apariencia única y atractiva para tu aplicación. Al establecer una estructura clara para tu tema y asignar roles y responsabilidades a cada paquete, podrás organizar tu personalización de manera efectiva. Además, al utilizar los roles de color de Material Design 3, podrás crear una paleta de colores coherente que mejore la experiencia del usuario. En las siguientes secciones, exploraremos cómo definir fuentes, iconos y estilos para completar tu tema personalizado. ¡Sigue adelante y diviértete creando tu propio tema en Swing!",[696,697,698],"style",{},"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 .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":321,"searchDepth":335,"depth":335,"links":700},[701,702,703,704,705],{"id":310,"depth":335,"text":311},{"id":380,"depth":335,"text":381},{"id":434,"depth":335,"text":435},{"id":604,"depth":335,"text":605},{"id":690,"depth":335,"text":691},"Aprende a definir los aspectos básicos de un tema personalizado en Swing, incluyendo colores, fuentes e iconos.","md",null,{"editButton":104},{"icon":83},{"title":93,"description":706},"j8yzMPQiIDENOgtpfZn7q22-ECXlJKS3jbqeehZ4yh0",[714,716],{"title":89,"path":90,"stem":91,"description":715,"icon":83,"children":-1},"Aprende a personalizar la apariencia de los componentes en Swing utilizando la clase `Graphics 2D` y técnicas de pintura avanzadas.",{"title":97,"path":98,"stem":99,"description":717,"icon":83,"children":-1},"Aprende a utilizar UI Delegates para personalizar la apariencia de los componentes en Swing, creando una experiencia de usuario única y atractiva.",1775101371680]