[{"data":1,"prerenderedAt":819},["ShallowReactive",2],{"navigation_docs":3,"-personalizacion-paint":298,"-personalizacion-paint-surround":814},[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":89,"body":300,"description":807,"extension":808,"links":809,"meta":810,"navigation":811,"path":90,"seo":812,"stem":91,"__hash__":813},"docs\u002F3.personalizacion\u002F04.paint.md",{"type":301,"value":302,"toc":800},"minimark",[303,312,319,332,336,346,571,577,581,586,768,782,786,790,796],[304,305,306,307,311],"p",{},"En esta sección, exploraremos cómo personalizar la apariencia de los componentes en Swing utilizando la clase ",[308,309,310],"code",{},"Graphics 2D"," y técnicas de pintura avanzadas. La capacidad de pintar tus propios componentes te permite crear interfaces gráficas únicas y atractivas que se adapten a tus necesidades específicas.",[313,314,316,317],"h2",{"id":315},"introducción-a-graphics-2d","Introducción a ",[308,318,310],{},[304,320,321,322,324,325,328,329,331],{},"La clase ",[308,323,310],{}," es una extensión de la clase ",[308,326,327],{},"Graphics"," que proporciona capacidades de dibujo más avanzadas. Con ",[308,330,310],{},", puedes dibujar formas, texto, imágenes y aplicar transformaciones para crear efectos visuales personalizados.",[313,333,335],{"id":334},"personalización-de-componentes","Personalización de Componentes",[304,337,338,339,342,343,345],{},"Antes de comenzar a pintar, es importante entender cómo funciona el proceso de pintura en Swing. Cada componente tiene un método ",[308,340,341],{},"paintComponent(Graphics g)"," que se llama automáticamente cuando el componente necesita ser redibujado. Para personalizar la apariencia de un componente, puedes sobrescribir este método y utilizar ",[308,344,310],{}," para dibujar lo que desees.",[347,348,353],"pre",{"className":349,"code":350,"language":351,"meta":352,"style":352},"language-java shiki shiki-themes github-dark","@Override\nprotected void paintComponent(Graphics g) {\n    super.paintComponent(g);\n    Graphics2D g2d = (Graphics2D) g;\n\n    \u002F\u002F Configura las propiedades de dibujo\n    g2d.setColor(Color.BLUE);\n    g2d.setStroke(new BasicStroke(2));\n\n    \u002F\u002F Dibuja un rectángulo personalizado\n    g2d.drawRect(10, 10, 100, 50);\n    \u002F\u002F Dibuja un texto personalizado\n    g2d.setFont(new Font(\"Arial\", Font.BOLD, 16));\n    g2d.drawString(\"Hola, Swing!\", 20, 40);\n}\n","java","",[308,354,355,368,384,400,412,419,426,438,463,468,474,505,511,540,565],{"__ignoreMap":352},[356,357,360,364],"span",{"class":358,"line":359},"line",1,[356,361,363],{"class":362},"s95oV","@",[356,365,367],{"class":366},"snl16","Override\n",[356,369,371,374,377,381],{"class":358,"line":370},2,[356,372,373],{"class":366},"protected",[356,375,376],{"class":366}," void",[356,378,380],{"class":379},"svObZ"," paintComponent",[356,382,383],{"class":362},"(Graphics g) {\n",[356,385,387,391,394,397],{"class":358,"line":386},3,[356,388,390],{"class":389},"sDLfK","    super",[356,392,393],{"class":362},".",[356,395,396],{"class":379},"paintComponent",[356,398,399],{"class":362},"(g);\n",[356,401,403,406,409],{"class":358,"line":402},4,[356,404,405],{"class":362},"    Graphics2D g2d ",[356,407,408],{"class":366},"=",[356,410,411],{"class":362}," (Graphics2D) g;\n",[356,413,415],{"class":358,"line":414},5,[356,416,418],{"emptyLinePlaceholder":417},true,"\n",[356,420,422],{"class":358,"line":421},6,[356,423,425],{"class":424},"sAwPA","    \u002F\u002F Configura las propiedades de dibujo\n",[356,427,429,432,435],{"class":358,"line":428},7,[356,430,431],{"class":362},"    g2d.",[356,433,434],{"class":379},"setColor",[356,436,437],{"class":362},"(Color.BLUE);\n",[356,439,441,443,446,449,452,455,457,460],{"class":358,"line":440},8,[356,442,431],{"class":362},[356,444,445],{"class":379},"setStroke",[356,447,448],{"class":362},"(",[356,450,451],{"class":366},"new",[356,453,454],{"class":379}," BasicStroke",[356,456,448],{"class":362},[356,458,459],{"class":389},"2",[356,461,462],{"class":362},"));\n",[356,464,466],{"class":358,"line":465},9,[356,467,418],{"emptyLinePlaceholder":417},[356,469,471],{"class":358,"line":470},10,[356,472,473],{"class":424},"    \u002F\u002F Dibuja un rectángulo personalizado\n",[356,475,477,479,482,484,487,490,492,494,497,499,502],{"class":358,"line":476},11,[356,478,431],{"class":362},[356,480,481],{"class":379},"drawRect",[356,483,448],{"class":362},[356,485,486],{"class":389},"10",[356,488,489],{"class":362},", ",[356,491,486],{"class":389},[356,493,489],{"class":362},[356,495,496],{"class":389},"100",[356,498,489],{"class":362},[356,500,501],{"class":389},"50",[356,503,504],{"class":362},");\n",[356,506,508],{"class":358,"line":507},12,[356,509,510],{"class":424},"    \u002F\u002F Dibuja un texto personalizado\n",[356,512,514,516,519,521,523,526,528,532,535,538],{"class":358,"line":513},13,[356,515,431],{"class":362},[356,517,518],{"class":379},"setFont",[356,520,448],{"class":362},[356,522,451],{"class":366},[356,524,525],{"class":379}," Font",[356,527,448],{"class":362},[356,529,531],{"class":530},"sU2Wk","\"Arial\"",[356,533,534],{"class":362},", Font.BOLD, ",[356,536,537],{"class":389},"16",[356,539,462],{"class":362},[356,541,543,545,548,550,553,555,558,560,563],{"class":358,"line":542},14,[356,544,431],{"class":362},[356,546,547],{"class":379},"drawString",[356,549,448],{"class":362},[356,551,552],{"class":530},"\"Hola, Swing!\"",[356,554,489],{"class":362},[356,556,557],{"class":389},"20",[356,559,489],{"class":362},[356,561,562],{"class":389},"40",[356,564,504],{"class":362},[356,566,568],{"class":358,"line":567},15,[356,569,570],{"class":362},"}\n",[304,572,573,574,576],{},"En este ejemplo, hemos sobrescrito el método ",[308,575,396],{}," para dibujar un rectángulo azul y un texto personalizado. Puedes experimentar con diferentes formas, colores y estilos de texto para crear la apariencia que deseas.",[313,578,580],{"id":579},"modificando-bótones-y-otros-componentes","Modificando Bótones y Otros Componentes",[304,582,583,584,393],{},"Además de personalizar componentes personalizados, también puedes modificar la apariencia de los componentes estándar de Swing, como botones, etiquetas y cuadros de texto. Para hacer esto, puedes crear una clase personalizada que extienda el componente que deseas modificar y sobrescribir su método ",[308,585,396],{},[347,587,589],{"className":349,"code":588,"language":351,"meta":352,"style":352},"public class CustomButton extends JButton {\n    @Override\n    protected void paintComponent(Graphics g) {\n        super.paintComponent(g);\n        Graphics2D g2d = (Graphics2D) g;\n\n        \u002F\u002F Configura las propiedades de dibujo para el botón personalizado\n        g2d.setColor(Color.GREEN);\n        g2d.fillRect(0, 0, getWidth(), getHeight());\n        g2d.setColor(Color.WHITE);\n        g2d.setFont(new Font(\"Arial\", Font.BOLD, 14));\n        g2d.drawString(getText(), 10, 20);\n    }\n}\n",[308,590,591,611,618,637,648,657,661,666,676,706,715,738,759,764],{"__ignoreMap":352},[356,592,593,596,599,602,605,608],{"class":358,"line":359},[356,594,595],{"class":366},"public",[356,597,598],{"class":366}," class",[356,600,601],{"class":379}," CustomButton",[356,603,604],{"class":366}," extends",[356,606,607],{"class":379}," JButton",[356,609,610],{"class":362}," {\n",[356,612,613,616],{"class":358,"line":370},[356,614,615],{"class":362},"    @",[356,617,367],{"class":366},[356,619,620,623,625,627,630,634],{"class":358,"line":386},[356,621,622],{"class":366},"    protected",[356,624,376],{"class":366},[356,626,380],{"class":379},[356,628,629],{"class":362},"(Graphics ",[356,631,633],{"class":632},"s9osk","g",[356,635,636],{"class":362},") {\n",[356,638,639,642,644,646],{"class":358,"line":402},[356,640,641],{"class":389},"        super",[356,643,393],{"class":362},[356,645,396],{"class":379},[356,647,399],{"class":362},[356,649,650,653,655],{"class":358,"line":414},[356,651,652],{"class":362},"        Graphics2D g2d ",[356,654,408],{"class":366},[356,656,411],{"class":362},[356,658,659],{"class":358,"line":421},[356,660,418],{"emptyLinePlaceholder":417},[356,662,663],{"class":358,"line":428},[356,664,665],{"class":424},"        \u002F\u002F Configura las propiedades de dibujo para el botón personalizado\n",[356,667,668,671,673],{"class":358,"line":440},[356,669,670],{"class":362},"        g2d.",[356,672,434],{"class":379},[356,674,675],{"class":362},"(Color.GREEN);\n",[356,677,678,680,683,685,688,690,692,694,697,700,703],{"class":358,"line":465},[356,679,670],{"class":362},[356,681,682],{"class":379},"fillRect",[356,684,448],{"class":362},[356,686,687],{"class":389},"0",[356,689,489],{"class":362},[356,691,687],{"class":389},[356,693,489],{"class":362},[356,695,696],{"class":379},"getWidth",[356,698,699],{"class":362},"(), ",[356,701,702],{"class":379},"getHeight",[356,704,705],{"class":362},"());\n",[356,707,708,710,712],{"class":358,"line":470},[356,709,670],{"class":362},[356,711,434],{"class":379},[356,713,714],{"class":362},"(Color.WHITE);\n",[356,716,717,719,721,723,725,727,729,731,733,736],{"class":358,"line":476},[356,718,670],{"class":362},[356,720,518],{"class":379},[356,722,448],{"class":362},[356,724,451],{"class":366},[356,726,525],{"class":379},[356,728,448],{"class":362},[356,730,531],{"class":530},[356,732,534],{"class":362},[356,734,735],{"class":389},"14",[356,737,462],{"class":362},[356,739,740,742,744,746,749,751,753,755,757],{"class":358,"line":507},[356,741,670],{"class":362},[356,743,547],{"class":379},[356,745,448],{"class":362},[356,747,748],{"class":379},"getText",[356,750,699],{"class":362},[356,752,486],{"class":389},[356,754,489],{"class":362},[356,756,557],{"class":389},[356,758,504],{"class":362},[356,760,761],{"class":358,"line":513},[356,762,763],{"class":362},"    }\n",[356,765,766],{"class":358,"line":542},[356,767,570],{"class":362},[304,769,770,771,774,775,778,779,781],{},"En este ejemplo, hemos creado una clase ",[308,772,773],{},"CustomButton"," que extiende ",[308,776,777],{},"JButton"," y sobrescribe el método ",[308,780,396],{}," para dibujar un botón verde con texto blanco. Puedes personalizar aún más el botón agregando efectos de sombra, bordes personalizados o animaciones.",[783,784,785],"note",{},"Recuerda consultar los aspectos de dibujo de cada componente para asegurarte de que tu personalización se integre bien con el diseño general de tu aplicación.",[313,787,789],{"id":788},"conclusión","Conclusión",[304,791,792,793,795],{},"Pintar en Swing te brinda la libertad de crear interfaces gráficas personalizadas y atractivas. Al dominar la clase ",[308,794,310],{}," y las técnicas de pintura avanzadas, puedes transformar tus aplicaciones Swing en experiencias visuales únicas que se adapten a tus necesidades específicas. Experimenta con diferentes estilos, formas y colores para descubrir el potencial creativo que Swing tiene para ofrecer.",[797,798,799],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}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 .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":352,"searchDepth":370,"depth":370,"links":801},[802,804,805,806],{"id":315,"depth":370,"text":803},"Introducción a Graphics 2D",{"id":334,"depth":370,"text":335},{"id":579,"depth":370,"text":580},{"id":788,"depth":370,"text":789},"Aprende a personalizar la apariencia de los componentes en Swing utilizando la clase `Graphics 2D` y técnicas de pintura avanzadas.","md",null,{"editButton":104},{"icon":83},{"title":89,"description":807},"r7bjswSP6t46RY_FmlW6MLhmDZq8LvS5FfFXvvjx_ds",[815,817],{"title":85,"path":86,"stem":87,"description":816,"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.",{"title":93,"path":94,"stem":95,"description":818,"icon":83,"children":-1},"Aprende a definir los aspectos básicos de un tema personalizado en Swing, incluyendo colores, fuentes e iconos.",1775101371463]