[{"data":1,"prerenderedAt":592},["ShallowReactive",2],{"navigation_docs":3,"-personalizacion-ui-delegates":298,"-personalizacion-ui-delegates-surround":587},[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":97,"body":300,"description":580,"extension":581,"links":582,"meta":583,"navigation":584,"path":98,"seo":585,"stem":99,"__hash__":586},"docs\u002F3.personalizacion\u002F06.ui-delegates.md",{"type":301,"value":302,"toc":574},"minimark",[303,307,312,315,319,331,487,500,504,511,557,563,567,570],[304,305,306],"p",{},"En esta sección, exploraremos cómo utilizar UI Delegates para personalizar la apariencia de los componentes en Swing. Los UI Delegates son una parte fundamental del sistema de renderizado de Swing y te permiten definir cómo se dibujan y se comportan los componentes en tu aplicación. A continuación, se presentan los conceptos clave que debes entender para aprovechar al máximo los UI Delegates en tu proceso de personalización.",[308,309,311],"h2",{"id":310},"qué-son-los-ui-delegates","¿Qué son los UI Delegates?",[304,313,314],{},"Los UI Delegates, también conocidos como \"Look and Feel Delegates\", son clases que se encargan de renderizar y manejar la apariencia y el comportamiento de los componentes en Swing. Cada componente tiene un UI Delegate asociado que define cómo se dibuja y cómo responde a las interacciones del usuario. Al personalizar los UI Delegates, puedes crear una apariencia única para tus componentes y mejorar la experiencia del usuario.",[308,316,318],{"id":317},"personalizando-ui-delegates","Personalizando UI Delegates",[304,320,321,322,326,327,330],{},"Para personalizar un UI Delegate, debes crear una clase que extienda la clase base del UI Delegate correspondiente al componente que deseas personalizar. Por ejemplo, si deseas personalizar el botón (JButton), debes crear una clase que extienda ",[323,324,325],"code",{},"BasicButtonUI"," o ",[323,328,329],{},"MetalButtonUI",", dependiendo del Look and Feel que estés utilizando.",[332,333,338],"pre",{"className":334,"code":335,"language":336,"meta":337,"style":337},"language-java shiki shiki-themes github-dark","import javax.swing.*;\nimport javax.swing.plaf.basic.BasicButtonUI;\nimport java.awt.*;  \n\npublic class CustomButtonUI extends BasicButtonUI {\n    @Override\n    public void paint(Graphics g, JComponent c) {\n        \u002F\u002F Personaliza la apariencia del botón aquí\n        super.paint(g, c);\n        \u002F\u002F Puedes agregar código adicional para dibujar elementos personalizados\n    }\n}\n","java","",[323,339,340,360,368,381,388,410,419,447,454,469,475,481],{"__ignoreMap":337},[341,342,345,349,353,357],"span",{"class":343,"line":344},"line",1,[341,346,348],{"class":347},"snl16","import",[341,350,352],{"class":351},"s95oV"," javax.swing.",[341,354,356],{"class":355},"sDLfK","*",[341,358,359],{"class":351},";\n",[341,361,363,365],{"class":343,"line":362},2,[341,364,348],{"class":347},[341,366,367],{"class":351}," javax.swing.plaf.basic.BasicButtonUI;\n",[341,369,371,373,376,378],{"class":343,"line":370},3,[341,372,348],{"class":347},[341,374,375],{"class":351}," java.awt.",[341,377,356],{"class":355},[341,379,380],{"class":351},";  \n",[341,382,384],{"class":343,"line":383},4,[341,385,387],{"emptyLinePlaceholder":386},true,"\n",[341,389,391,394,397,401,404,407],{"class":343,"line":390},5,[341,392,393],{"class":347},"public",[341,395,396],{"class":347}," class",[341,398,400],{"class":399},"svObZ"," CustomButtonUI",[341,402,403],{"class":347}," extends",[341,405,406],{"class":399}," BasicButtonUI",[341,408,409],{"class":351}," {\n",[341,411,413,416],{"class":343,"line":412},6,[341,414,415],{"class":351},"    @",[341,417,418],{"class":347},"Override\n",[341,420,422,425,428,431,434,438,441,444],{"class":343,"line":421},7,[341,423,424],{"class":347},"    public",[341,426,427],{"class":347}," void",[341,429,430],{"class":399}," paint",[341,432,433],{"class":351},"(Graphics ",[341,435,437],{"class":436},"s9osk","g",[341,439,440],{"class":351},", JComponent ",[341,442,443],{"class":436},"c",[341,445,446],{"class":351},") {\n",[341,448,450],{"class":343,"line":449},8,[341,451,453],{"class":452},"sAwPA","        \u002F\u002F Personaliza la apariencia del botón aquí\n",[341,455,457,460,463,466],{"class":343,"line":456},9,[341,458,459],{"class":355},"        super",[341,461,462],{"class":351},".",[341,464,465],{"class":399},"paint",[341,467,468],{"class":351},"(g, c);\n",[341,470,472],{"class":343,"line":471},10,[341,473,474],{"class":452},"        \u002F\u002F Puedes agregar código adicional para dibujar elementos personalizados\n",[341,476,478],{"class":343,"line":477},11,[341,479,480],{"class":351},"    }\n",[341,482,484],{"class":343,"line":483},12,[341,485,486],{"class":351},"}\n",[304,488,489,490,493,494,496,497,499],{},"En este ejemplo, hemos creado una clase ",[323,491,492],{},"CustomButtonUI"," que extiende ",[323,495,325],{},". Dentro del método ",[323,498,465],{},", puedes agregar código para personalizar la apariencia del botón, como cambiar los colores, agregar bordes personalizados o dibujar elementos adicionales.",[308,501,503],{"id":502},"aplicando-el-ui-delegate-personalizado","Aplicando el UI Delegate Personalizado",[304,505,506,507,510],{},"Una vez que hayas creado tu UI Delegate personalizado, debes aplicarlo a los componentes de tu aplicación. Puedes hacerlo utilizando el método ",[323,508,509],{},"setUI"," en el componente que deseas personalizar. Por ejemplo:",[332,512,514],{"className":334,"code":513,"language":336,"meta":337,"style":337},"JButton myButton = new JButton(\"Custom Button\");\nmyButton.setUI(new CustomButtonUI());\n",[323,515,516,540],{"__ignoreMap":337},[341,517,518,521,524,527,530,533,537],{"class":343,"line":344},[341,519,520],{"class":351},"JButton myButton ",[341,522,523],{"class":347},"=",[341,525,526],{"class":347}," new",[341,528,529],{"class":399}," JButton",[341,531,532],{"class":351},"(",[341,534,536],{"class":535},"sU2Wk","\"Custom Button\"",[341,538,539],{"class":351},");\n",[341,541,542,545,547,549,552,554],{"class":343,"line":362},[341,543,544],{"class":351},"myButton.",[341,546,509],{"class":399},[341,548,532],{"class":351},[341,550,551],{"class":347},"new",[341,553,400],{"class":399},[341,555,556],{"class":351},"());\n",[304,558,559,560,562],{},"En este ejemplo, hemos creado un botón y le hemos asignado nuestro ",[323,561,492],{}," para que se renderice con la apariencia personalizada que hemos definido.",[308,564,566],{"id":565},"conclusión","Conclusión",[304,568,569],{},"Los UI Delegates son una herramienta poderosa para personalizar la apariencia de los componentes en Swing. Al crear tus propios UI Delegates, puedes lograr una apariencia única y atractiva para tu aplicación, mejorando la experiencia del usuario. En las siguientes secciones, exploraremos cómo personalizar otros aspectos de los componentes utilizando UI Delegates y cómo integrarlos con otros elementos de personalización, como colores y fuentes. Recuerda que la personalización de UI Delegates puede requerir un conocimiento profundo de cómo funcionan los componentes en Swing, así que no dudes en experimentar y consultar la documentación oficial para obtener más información sobre cómo personalizar los UI Delegates de manera efectiva.",[571,572,573],"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 .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}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 .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}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 .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}",{"title":337,"searchDepth":362,"depth":362,"links":575},[576,577,578,579],{"id":310,"depth":362,"text":311},{"id":317,"depth":362,"text":318},{"id":502,"depth":362,"text":503},{"id":565,"depth":362,"text":566},"Aprende a utilizar UI Delegates para personalizar la apariencia de los componentes en Swing, creando una experiencia de usuario única y atractiva.","md",null,{"editButton":104},{"icon":83},{"title":97,"description":580},"dQ4Z6uvss2wX0VQqLmV-zkfr7-35WIgtQPuPCPPa0Qc",[588,590],{"title":93,"path":94,"stem":95,"description":589,"icon":83,"children":-1},"Aprende a definir los aspectos básicos de un tema personalizado en Swing, incluyendo colores, fuentes e iconos.",{"title":101,"path":102,"stem":103,"description":591,"icon":83,"children":-1},"Aprende a utilizar delegadores de UI para personalizar la apariencia de los componentes en Swing, creando una experiencia de usuario única y atractiva.",1775101371791]