[{"data":1,"prerenderedAt":5391},["ShallowReactive",2],{"navigation_docs":3,"-archivos-ui-rpg-ui-2":412,"-archivos-ui-rpg-ui-2-surround":5386},[4,18,43,118,160,200,231,320,346],{"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,"icon":20,"path":21,"stem":22,"children":23,"page":42},"Entorno de desarrollo","i-codicon-edit-code","\u002Fide","2.ide",[24,28,33,37],{"title":25,"path":26,"stem":27,"icon":20},"¿Qué es un IDE?","\u002Fide\u002Fentorno","2.ide\u002F1.entorno",{"title":29,"path":30,"stem":31,"icon":32},"Estructura de un Proyecto","\u002Fide\u002Festructura","2.ide\u002F2.estructura","i-clarity-tree-view-line",{"title":34,"path":35,"stem":36,"icon":20},"La compilación en un IDE","\u002Fide\u002Fcompilacion","2.ide\u002F3.compilacion",{"title":38,"path":39,"stem":40,"icon":41},"Depuración de Código","\u002Fide\u002Fdepurar","2.ide\u002F4.depurar","i-lucide-bug",false,{"title":44,"icon":45,"path":46,"stem":47,"children":48,"page":42},"Clases y Objetos","i-catppuccin-java-class","\u002Fclases-objetos","3.clases-objetos",[49,53,57,62,66,70,74,78,83,88,92,96,101,106,110,114],{"title":50,"path":51,"stem":52},"Repaso previo a Clases y Objetos","\u002Fclases-objetos\u002Fpreview","3.clases-objetos\u002F00.preview",{"title":54,"path":55,"stem":56,"icon":45},"¿Qué es la Programación Orientada a Objetos (POO)?","\u002Fclases-objetos\u002Fpoo","3.clases-objetos\u002F01.poo",{"title":58,"path":59,"stem":60,"icon":61},"Diagramas de Clases y Objetos","\u002Fclases-objetos\u002Fdiagramas","3.clases-objetos\u002F02.diagramas","i-devicon-uml",{"title":63,"path":64,"stem":65,"icon":45},"Las Clases","\u002Fclases-objetos\u002Fclases","3.clases-objetos\u002F03.clases",{"title":67,"path":68,"stem":69,"icon":45},"Ámbito y Visibilidad","\u002Fclases-objetos\u002Fambito","3.clases-objetos\u002F04.ambito",{"title":71,"path":72,"stem":73,"icon":45},"Declaración e Instanciación de Objetos","\u002Fclases-objetos\u002Fobjetos","3.clases-objetos\u002F05.objetos",{"title":75,"path":76,"stem":77,"icon":45},"Clases Predefinidas en Java","\u002Fclases-objetos\u002Fpredefinidas","3.clases-objetos\u002F06.predefinidas",{"title":79,"path":80,"stem":81,"icon":82},"Paquetes en Java","\u002Fclases-objetos\u002Fpaquetes","3.clases-objetos\u002F07.paquetes","i-material-icon-theme-folder-java-open",{"title":84,"path":85,"stem":86,"icon":87},"Las Excepciones","\u002Fclases-objetos\u002Fexcepciones","3.clases-objetos\u002F08.excepciones","i-catppuccin-java-exception",{"title":89,"path":90,"stem":91,"icon":45},"La clase JOptionPane","\u002Fclases-objetos\u002Fjoptionpane","3.clases-objetos\u002F09.joptionpane",{"title":93,"path":94,"stem":95,"icon":45},"Constructores y Accesores","\u002Fclases-objetos\u002Fconstructores","3.clases-objetos\u002F10.constructores",{"title":97,"path":98,"stem":99,"icon":100},"Tipos Enumerados (Enums)","\u002Fclases-objetos\u002Fenumerados","3.clases-objetos\u002F11.enumerados","i-catppuccin-java-enum",{"title":102,"path":103,"stem":104,"icon":105},"Modificadores de acceso static y final","\u002Fclases-objetos\u002Fmodificadores","3.clases-objetos\u002F12.modificadores","i-mdi-chart-box",{"title":107,"path":108,"stem":109,"icon":105},"El casting en Java","\u002Fclases-objetos\u002Fcasting","3.clases-objetos\u002F13.casting",{"title":111,"path":112,"stem":113},"Las Expresiones Regulares","\u002Fclases-objetos\u002Fexpresiones-regulares","3.clases-objetos\u002F14.expresiones-regulares",{"title":115,"path":116,"stem":117,"icon":105},"Clases Genéricas en Java","\u002Fclases-objetos\u002Fclases-genericas","3.clases-objetos\u002F15.clases-genericas",{"title":119,"icon":120,"path":121,"stem":122,"children":123,"page":42},"Funciones (Métodos)","i-material-symbols-function","\u002Fmetodos","4.metodos",[124,128,132,136,140,144,148,152,156],{"title":125,"path":126,"stem":127},"Funciones Genéricas","\u002Fmetodos\u002Ffuncion-generica","4.metodos\u002F01.funcion-generica",{"title":129,"path":130,"stem":131},"Métodos de Instancia y de Clase","\u002Fmetodos\u002Finstancia-clase","4.metodos\u002F02.instancia-clase",{"title":133,"path":134,"stem":135},"Sobrecarga de Funciones","\u002Fmetodos\u002Fsobrecarga","4.metodos\u002F03.sobrecarga",{"title":137,"path":138,"stem":139},"Alcance de Variables y Métodos","\u002Fmetodos\u002Falcance","4.metodos\u002F04.alcance",{"title":141,"path":142,"stem":143},"Recursividad","\u002Fmetodos\u002Frecursividad","4.metodos\u002F05.recursividad",{"title":145,"path":146,"stem":147},"Puntero this","\u002Fmetodos\u002Fthis","4.metodos\u002F06.this",{"title":149,"path":150,"stem":151},"Los argumentos variables (varargs)","\u002Fmetodos\u002Fvarargs","4.metodos\u002F07.varargs",{"title":153,"path":154,"stem":155},"La clase Arrays","\u002Fmetodos\u002Farrays","4.metodos\u002F08.arrays",{"title":157,"path":158,"stem":159},"Predicados Simples y Compuestos en Java","\u002Fmetodos\u002Fpredicados","4.metodos\u002F09.predicados",{"title":161,"path":162,"stem":163,"children":164,"icon":199},"Herencia","\u002Fherencia","5.herencia\u002F01.index",[165,167,171,175,179,183,187,191,195],{"title":166,"path":162,"stem":163},"¿Qué es la herencia?",{"title":168,"path":169,"stem":170},"Sobreescritura de métodos y uso de `super`","\u002Fherencia\u002Fsobeescritura","5.herencia\u002F02.sobeescritura",{"title":172,"path":173,"stem":174},"Tipos de herencia","\u002Fherencia\u002Ftipos-herencia","5.herencia\u002F03.tipos-herencia",{"title":176,"path":177,"stem":178},"La clase Object en Java","\u002Fherencia\u002Fobject","5.herencia\u002F04.object",{"title":180,"path":181,"stem":182},"Polimorfismo","\u002Fherencia\u002Fpolimorfismo","5.herencia\u002F05.polimorfismo",{"title":184,"path":185,"stem":186},"Clases y Funciones Abstractas","\u002Fherencia\u002Fabstract","5.herencia\u002F06.abstract",{"title":188,"path":189,"stem":190},"Interfaces","\u002Fherencia\u002Finterfaces","5.herencia\u002F07.interfaces",{"title":192,"path":193,"stem":194},"Funciones e Interfaces","\u002Fherencia\u002Ffunciones-interfaces","5.herencia\u002F08.funciones-interfaces",{"title":196,"path":197,"stem":198},"Interfaces y Funciones Lambda","\u002Fherencia\u002Flambda-interface","5.herencia\u002F09.lambda-interface","i-material-symbols-heritage",{"title":201,"path":202,"stem":203,"children":204,"icon":199},"Arreglos","\u002Farreglos","6.arreglos\u002F01.index",[205,207,211,215,219,223,227],{"title":206,"path":202,"stem":203},"Los arreglos en Java",{"title":208,"path":209,"stem":210},"Los arreglos","\u002Farreglos\u002Farray","6.arreglos\u002F02.array",{"title":212,"path":213,"stem":214},"Matrices","\u002Farreglos\u002Fmatrices","6.arreglos\u002F03.matrices",{"title":216,"path":217,"stem":218},"Comparadores","\u002Farreglos\u002Fcomparator","6.arreglos\u002F04.comparator",{"title":220,"path":221,"stem":222},"Arreglos dinámicos: ArrayList","\u002Farreglos\u002Farraylist","6.arreglos\u002F05.arraylist",{"title":224,"path":225,"stem":226},"Arreglos Relacionales: HashMap","\u002Farreglos\u002Fhashmap","6.arreglos\u002F06.hashmap",{"title":228,"path":229,"stem":230},"La clase Stream en Java","\u002Farreglos\u002Fstream","6.arreglos\u002F07.stream",{"title":232,"icon":199,"path":233,"stem":234,"children":235,"page":42},"Archivos e Interfaz de Usuario","\u002Farchivos-ui","7.archivos-ui",[236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316],{"title":237,"path":238,"stem":239},"El paquete Swing","\u002Farchivos-ui\u002Fswing","7.archivos-ui\u002F01.swing",{"title":241,"path":242,"stem":243},"La clase JFrame y el JPanel","\u002Farchivos-ui\u002Fjpanel","7.archivos-ui\u002F02.jpanel",{"title":245,"path":246,"stem":247},"Los Layouts en Swing","\u002Farchivos-ui\u002Flayout","7.archivos-ui\u002F03.layout",{"title":249,"path":250,"stem":251},"Iniciando con Swing","\u002Farchivos-ui\u002Finiciando","7.archivos-ui\u002F04.iniciando",{"title":253,"path":254,"stem":255},"Las clases Color y Font en Swing","\u002Farchivos-ui\u002Fcolor-font","7.archivos-ui\u002F05.color-font",{"title":257,"path":258,"stem":259},"Etiquetas en Swing","\u002Farchivos-ui\u002Fetiquetas","7.archivos-ui\u002F06.etiquetas",{"title":261,"path":262,"stem":263},"Personalizando la apariencia de los componentes en Swing","\u002Farchivos-ui\u002Fpersonalizando","7.archivos-ui\u002F07.personalizando",{"title":265,"path":266,"stem":267},"Sobrescribiendo el método drawComponent() en Swing","\u002Farchivos-ui\u002Fdraw","7.archivos-ui\u002F08.draw",{"title":269,"path":270,"stem":271},"Manejando eventos en Swing","\u002Farchivos-ui\u002Feventos","7.archivos-ui\u002F09.eventos",{"title":273,"path":274,"stem":275},"Personalización de Componentes mediante la Extensión de Clases en Swing","\u002Farchivos-ui\u002Fextends-component","7.archivos-ui\u002F10.extends-component",{"title":277,"path":278,"stem":279},"Gradientes","\u002Farchivos-ui\u002Fgradientes","7.archivos-ui\u002F11.gradientes",{"title":281,"path":282,"stem":283},"Botones en Swing","\u002Farchivos-ui\u002Fbotones","7.archivos-ui\u002F12.botones",{"title":285,"path":286,"stem":287},"Los delegadores en Swing","\u002Farchivos-ui\u002Fdelegadores","7.archivos-ui\u002F13.delegadores",{"title":289,"path":290,"stem":291},"UI para nuestro RPG: Parte 1","\u002Farchivos-ui\u002Frpg-ui-1","7.archivos-ui\u002F14.rpg-ui-1",{"title":293,"path":294,"stem":295},"UI para nuestro RPG: Parte 2","\u002Farchivos-ui\u002Frpg-ui-2","7.archivos-ui\u002F15.rpg-ui-2",{"title":297,"path":298,"stem":299},"Los Streams Entrada y Salida","\u002Farchivos-ui\u002Fstreams","7.archivos-ui\u002F16.streams",{"title":301,"path":302,"stem":303},"Archivo tipo Objeto","\u002Farchivos-ui\u002Farchivo-objeto","7.archivos-ui\u002F17.archivo-objeto",{"title":305,"path":306,"stem":307},"UI para nuestro RPG: Parte 3","\u002Farchivos-ui\u002Frpg-ui-3","7.archivos-ui\u002F18.rpg-ui-3",{"title":309,"path":310,"stem":311},"UI para nuestro RPG: Parte 4","\u002Farchivos-ui\u002Frpg-ui-4","7.archivos-ui\u002F19.rpg-ui-4",{"title":313,"path":314,"stem":315},"UI para nuestro RPG: Parte 5","\u002Farchivos-ui\u002Frpg-ui-5","7.archivos-ui\u002F20.rpg-ui-5",{"title":317,"path":318,"stem":319},"UI para nuestro RPG: Parte 6","\u002Farchivos-ui\u002Frpg-ui-6","7.archivos-ui\u002F21.rpg-ui-6",{"title":321,"icon":322,"path":323,"stem":324,"children":325,"page":42},"Ejemplos","i-check-circle","\u002Fejemplos","8.ejemplos",[326,330,334,338,342],{"title":327,"path":328,"stem":329,"icon":105},"Ejemplo 1: Validando entradas con JOptionPane","\u002Fejemplos\u002Fejemplo-01","8.ejemplos\u002F01.ejemplo-01",{"title":331,"path":332,"stem":333},"Ejemplo 02: Uso de clases genéricas en Java","\u002Fejemplos\u002Fejemplo-02","8.ejemplos\u002F02.ejemplo-02",{"title":335,"path":336,"stem":337},"Ejemplo 03: Uso de Enum, Excepciones en Java","\u002Fejemplos\u002Fejemplo-03","8.ejemplos\u002F03.ejemplo-03",{"title":339,"path":340,"stem":341},"Ejemplo 4: Clase con funciones genéricas de validación","\u002Fejemplos\u002Fejemplo-04","8.ejemplos\u002F04.ejemplo-04",{"title":343,"path":344,"stem":345},"Ejemplo 5: Sistema de Gestión de Empleados","\u002Fejemplos\u002Fejemplo-05","8.ejemplos\u002F05.ejemplo-05",{"title":347,"icon":322,"path":348,"stem":349,"children":350,"page":42},"Actividades","\u002Factividades","9.actividades",[351,355,360,364,368,372,376,380,384,388,392,396,400,404,408],{"title":352,"path":353,"stem":354,"icon":105},"Actividad 1: Infografía sobre el proceso de compilación","\u002Factividades\u002Fact-01","9.actividades\u002F01.act-01",{"title":356,"path":357,"stem":358,"icon":359},"Actividad 2: Modelando Diagramas de Clases UML","\u002Factividades\u002Fact-02","9.actividades\u002F02.act-02","i-material-icon-theme-uml",{"title":361,"path":362,"stem":363,"icon":45},"Actividad 3: Creando Clases y Objetos en Java","\u002Factividades\u002Fact-03","9.actividades\u002F03.act-03",{"title":365,"path":366,"stem":367},"Actividad 4: Validando entradas de datos","\u002Factividades\u002Fact-04","9.actividades\u002F04.act-04",{"title":369,"path":370,"stem":371,"icon":105},"Actividad 5: Implementando una clase genérica","\u002Factividades\u002Fact-05","9.actividades\u002F05.act-05",{"title":373,"path":374,"stem":375,"icon":105},"Actividad 6: Expandiendo InputValidator con Predicados y Function","\u002Factividades\u002Fact-06","9.actividades\u002F06.act-06",{"title":377,"path":378,"stem":379,"icon":105},"Actividad 7: Gestor de Biblioteca con InputValidator","\u002Factividades\u002Fact-07","9.actividades\u002F07.act-07",{"title":381,"path":382,"stem":383,"icon":105},"Actividad 8: Calculadora de Figuras Geométricas","\u002Factividades\u002Fact-08","9.actividades\u002F08.act-08",{"title":385,"path":386,"stem":387,"icon":105},"Actividad 9: gestión de una empresa agroalimentaria","\u002Factividades\u002Fact-09","9.actividades\u002F09.act-09",{"title":389,"path":390,"stem":391,"icon":105},"Actividad 10: Sistema de gestión de clínicas veterinarias","\u002Factividades\u002Fact-10","9.actividades\u002F10.act-10",{"title":393,"path":394,"stem":395},"Definición de Proyecto Evolutivo","\u002Factividades\u002Frpg","9.actividades\u002F11.rpg",{"title":397,"path":398,"stem":399},"Actividad 11: Creación de Personajes","\u002Factividades\u002Fact-11","9.actividades\u002F12.act-11",{"title":401,"path":402,"stem":403},"Actividad 12: El Inventario y los Objetos","\u002Factividades\u002Fact-12","9.actividades\u002F13.act-12",{"title":405,"path":406,"stem":407},"Actividad 13: El combate por turnos","\u002Factividades\u002Fact-13","9.actividades\u002F14.act-13",{"title":409,"path":410,"stem":411},"Actividad 14: Guardando y Cargando","\u002Factividades\u002Fact-14","9.actividades\u002F15.act-14",{"id":413,"title":293,"body":414,"description":5380,"extension":5381,"links":5382,"meta":5383,"navigation":482,"path":294,"seo":5384,"stem":295,"__hash__":5385},"docs\u002F7.archivos-ui\u002F15.rpg-ui-2.md",{"type":415,"value":416,"toc":5371},"minimark",[417,422,432,436,439,443,451,700,714,1640,1654,1663,1667,1670,2532,2542,2553,2557,2560,2703,2720,4075,4083,4090,4245,4257,4261,4264,5335,5351,5355,5364,5367],[418,419,421],"h2",{"id":420},"anteriormente","Anteriormente...",[423,424,425,426,431],"p",{},"En la ",[427,428,430],"a",{"href":429},".\u002Frpg-ui-1","primera parte"," de esta serie, comenzamos a construir la interfaz de usuario para nuestro RPG. Implementamos un sistema básico de barras, botones y elementos de nuestra interfaz. Ahora, en esta segunda parte, vamos a expandir esa base y agregar más funcionalidades para hacer nuestra UI más interactiva y funcional.",[418,433,435],{"id":434},"paneles-y-contenedores","Paneles y Contenedores",[423,437,438],{},"Para organizar mejor nuestra interfaz, es importante utilizar paneles y contenedores. Estos nos permiten agrupar elementos relacionados y mejorar la experiencia del usuario. En esta sección, implementaremos un sistema de paneles que nos permitirá mostrar información relevante de manera clara y ordenada.",[418,440,442],{"id":441},"creando-un-panel","Creando un Panel",[423,444,445,446,450],{},"Los paneles en Swing son contenedores que pueden contener otros componentes. Para crear un panel, podemos usar la clase ",[447,448,449],"code",{},"JPanel",". Aquí hay un ejemplo de cómo crear un panel básico:",[452,453,454],"code-collapse",{},[455,456,462],"pre",{"className":457,"code":458,"filename":459,"language":460,"meta":461,"style":461},"language-java shiki shiki-themes github-dark","package app.game.rpg.ui.components.panels;\n\nimport app.game.rpg.ui.components.delegates.RPGPanelUI;\n\nimport javax.swing.*;\nimport java.awt.*;\n\n\u002F**\n * RPGPanel es una clase personalizada que extiende JPanel para proporcionar un panel con un borde redondeado\n * y degradado de color, diseñado específicamente para nuestra interfaz gráfica de juego RPG. Este panel se puede utilizar\n * para mostrar diferentes elementos del juego en distintos estados de juego, como los personajes principales o las\n * características de la partida actualmente activas.\n *\u002F\npublic class RPGPanel extends JPanel {\n\n    \u002F**\n     * Constructor para crear un objeto RPGPanel con el color de inicio y final del degradado.\n     *\n     * @param startColor Color inicial seleccionado para el degradado del panel RPGPanel.\n     * @param endColor   Color final seleccionado para el degradado del panel RPGPanel.\n     *\u002F\n    public RPGPanel(Color startColor, Color endColor) {\n        setUI(new RPGPanelUI(startColor, endColor));\n    }\n}\n","app.game.rpg.ui.components.RPGInfoPanel.java","java","",[447,463,464,477,484,493,498,513,525,530,537,543,549,555,561,567,589,594,600,606,612,628,641,647,670,688,694],{"__ignoreMap":461},[465,466,469,473],"span",{"class":467,"line":468},"line",1,[465,470,472],{"class":471},"snl16","package",[465,474,476],{"class":475},"s95oV"," app.game.rpg.ui.components.panels;\n",[465,478,480],{"class":467,"line":479},2,[465,481,483],{"emptyLinePlaceholder":482},true,"\n",[465,485,487,490],{"class":467,"line":486},3,[465,488,489],{"class":471},"import",[465,491,492],{"class":475}," app.game.rpg.ui.components.delegates.RPGPanelUI;\n",[465,494,496],{"class":467,"line":495},4,[465,497,483],{"emptyLinePlaceholder":482},[465,499,501,503,506,510],{"class":467,"line":500},5,[465,502,489],{"class":471},[465,504,505],{"class":475}," javax.swing.",[465,507,509],{"class":508},"sDLfK","*",[465,511,512],{"class":475},";\n",[465,514,516,518,521,523],{"class":467,"line":515},6,[465,517,489],{"class":471},[465,519,520],{"class":475}," java.awt.",[465,522,509],{"class":508},[465,524,512],{"class":475},[465,526,528],{"class":467,"line":527},7,[465,529,483],{"emptyLinePlaceholder":482},[465,531,533],{"class":467,"line":532},8,[465,534,536],{"class":535},"sAwPA","\u002F**\n",[465,538,540],{"class":467,"line":539},9,[465,541,542],{"class":535}," * RPGPanel es una clase personalizada que extiende JPanel para proporcionar un panel con un borde redondeado\n",[465,544,546],{"class":467,"line":545},10,[465,547,548],{"class":535}," * y degradado de color, diseñado específicamente para nuestra interfaz gráfica de juego RPG. Este panel se puede utilizar\n",[465,550,552],{"class":467,"line":551},11,[465,553,554],{"class":535}," * para mostrar diferentes elementos del juego en distintos estados de juego, como los personajes principales o las\n",[465,556,558],{"class":467,"line":557},12,[465,559,560],{"class":535}," * características de la partida actualmente activas.\n",[465,562,564],{"class":467,"line":563},13,[465,565,566],{"class":535}," *\u002F\n",[465,568,570,573,576,580,583,586],{"class":467,"line":569},14,[465,571,572],{"class":471},"public",[465,574,575],{"class":471}," class",[465,577,579],{"class":578},"svObZ"," RPGPanel",[465,581,582],{"class":471}," extends",[465,584,585],{"class":578}," JPanel",[465,587,588],{"class":475}," {\n",[465,590,592],{"class":467,"line":591},15,[465,593,483],{"emptyLinePlaceholder":482},[465,595,597],{"class":467,"line":596},16,[465,598,599],{"class":535},"    \u002F**\n",[465,601,603],{"class":467,"line":602},17,[465,604,605],{"class":535},"     * Constructor para crear un objeto RPGPanel con el color de inicio y final del degradado.\n",[465,607,609],{"class":467,"line":608},18,[465,610,611],{"class":535},"     *\n",[465,613,615,618,621,625],{"class":467,"line":614},19,[465,616,617],{"class":535},"     * ",[465,619,620],{"class":471},"@param",[465,622,624],{"class":623},"s9osk"," startColor",[465,626,627],{"class":535}," Color inicial seleccionado para el degradado del panel RPGPanel.\n",[465,629,631,633,635,638],{"class":467,"line":630},20,[465,632,617],{"class":535},[465,634,620],{"class":471},[465,636,637],{"class":623}," endColor",[465,639,640],{"class":535},"   Color final seleccionado para el degradado del panel RPGPanel.\n",[465,642,644],{"class":467,"line":643},21,[465,645,646],{"class":535},"     *\u002F\n",[465,648,650,653,655,658,661,664,667],{"class":467,"line":649},22,[465,651,652],{"class":471},"    public",[465,654,579],{"class":578},[465,656,657],{"class":475},"(Color ",[465,659,660],{"class":623},"startColor",[465,662,663],{"class":475},", Color ",[465,665,666],{"class":623},"endColor",[465,668,669],{"class":475},") {\n",[465,671,673,676,679,682,685],{"class":467,"line":672},23,[465,674,675],{"class":578},"        setUI",[465,677,678],{"class":475},"(",[465,680,681],{"class":471},"new",[465,683,684],{"class":578}," RPGPanelUI",[465,686,687],{"class":475},"(startColor, endColor));\n",[465,689,691],{"class":467,"line":690},24,[465,692,693],{"class":475},"    }\n",[465,695,697],{"class":467,"line":696},25,[465,698,699],{"class":475},"}\n",[423,701,702,703,706,707,709,710,713],{},"En esta clase ",[447,704,705],{},"RPGPanel",", extendemos ",[447,708,449],{}," y utilizamos un UI personalizado (",[447,711,712],{},"RPGPanelUI",") para darle un estilo único a nuestro panel. Este panel puede ser utilizado para mostrar información como el inventario del jugador, las estadísticas de los personajes, o cualquier otra información relevante.",[452,715,716],{},[455,717,720],{"className":457,"code":718,"filename":719,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.delegates;\n\nimport app.game.rpg.ui.components.borders.RPGRoundedBorder;\n\nimport javax.swing.*;\nimport javax.swing.border.CompoundBorder;\nimport javax.swing.border.EmptyBorder;\nimport javax.swing.plaf.basic.BasicPanelUI;\nimport java.awt.*;\n\n\u002F**\n * RPGPanelUI es una clase personalizada que extiende BasicPanelUI para proporcionar un panel con un borde redondeado\n * y degradado de color, diseñado específicamente para nuestra interfaz gráfica de juego RPG. Este panel se puede utilizar\n * para mostrar diferentes elementos del juego en distintos estados de juego, como los personajes principales o las\n * características de la partida actualmente activas.\n *\u002F\npublic class RPGPanelUI extends BasicPanelUI {\n\n    \u002F**\n     * Color inicial del degradado del panel RPGPanelUI\n     *\u002F\n    protected final Color startColor;\n    \u002F**\n     * Color final del degradado del panel RPGPanelUI\n     *\u002F\n    protected final Color endColor;\n\n    \u002F**\n     * Constructor para crear un objeto RPGPanelUI con el color de inicio y final del degradado.\n     *\n     * @param startColor Color inicial seleccionado para el degradado del panel RPGPanelUI.\n     * @param endColor   Color final seleccionado para el degradado del panel RPGPanelUI.\n     *\u002F\n    public RPGPanelUI(Color startColor, Color endColor) {\n        this.startColor = startColor;\n        this.endColor = endColor;\n    }\n\n    \u002F**\n     * Función que permite aplicar características por defecto a un JPanel. En nuestro caso, instalamos un borde\n     * compuesto de un borde redondeado y un borde vacío (padding interno), eliminamos su opacidad y un layout box\n     * para que los componentes a agregar se coloquen de forma vertical.\n     *\n     * @param p an instance of {@code JPanel}\n     *\u002F\n    @Override\n    protected void installDefaults(JPanel p) {\n\n        super.installDefaults(p);\n        RPGRoundedBorder border = new RPGRoundedBorder(5, 0);\n        EmptyBorder emptyBorder = new EmptyBorder(10, 10, 10, 10);\n        p.setOpaque(false);\n        p.setBorder(new CompoundBorder(border, emptyBorder));\n        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));\n    }\n\n    \u002F**\n     * Función que permite dibujar el fondo degradado del panel RPGPanelUI en un componente {@code JComponent}.\n     * En nuestro caso usamos un degradado radial para dibujar una textura circular con un color inicial y final,\n     * sin embargo, esto puede modificarse y\u002Fo agregarse diversos modelos de degradado dado por ejemplo de un Enum.\n     *\n     * @param g Elemento \u003Ccode>Graphics\u003C\u002Fcode> del componente a dibujar el fondo degradado.\n     * @param c Componente que se va a dibujar el fondo degradado del panel RPGPanelUI.\n     *\u002F\n    @Override\n    public void paint(Graphics g, JComponent c) {\n\n        Graphics2D g2d = (Graphics2D) g;\n        g2d.setPaint(getPaintMethod(c));\n        g2d.fillRect(0, 0, c.getWidth(), c.getHeight());\n        super.paint(g, c);\n        g2d.dispose();\n    }\n\n    \u002F**\n     * Función que en este caso devuelve un degradado radial. Si fuera necesario se puede modificar para incorporar\n     * otro tipo de degradados.\n     *\n     * @param c Componente que se va a dibujar el fondo degradado del panel RPGPanelUI.\n     * @return El tipo Paint que va a representar el degradado.\n     *\u002F\n    protected Paint getPaintMethod(JComponent c) {\n\n        \u002F\u002F Creamos un punto central en las coordenadas (x: width\u002F2, y: height\u002F2)\n        Point center = new Point(c.getWidth() \u002F 2, c.getHeight() \u002F 2);\n        \u002F\u002F Obtenemos el radio de dibujo obteniendo el máximo entre las dimensiones width y height del componente a\n        \u002F\u002F pintar y dividiendo el resultado entre dos\n        float radius = (float) Math.max(c.getWidth(), c.getHeight()) \u002F 2;\n        \u002F\u002F Creamos un arreglo de floats que indica el ratio en el que se van a repartir los colores inicial y final.\n        float[] colorsRatio = new float[]{0f, 1f};\n        \u002F\u002F Un arreglo de Color para almacenar los colores inicial y final\n        Color[] colors = new Color[]{startColor, endColor};\n        return new RadialGradientPaint(center, radius, colorsRatio, colors);\n    }\n}\n","app.game.rpg.ui.components.delegates.RPGPanelUI.java",[447,721,722,729,733,740,744,754,761,768,775,785,789,793,798,802,806,810,814,829,833,837,842,846,857,861,866,870,880,885,890,896,901,913,925,930,947,962,975,980,985,990,996,1002,1008,1013,1026,1031,1040,1058,1063,1078,1106,1138,1154,1172,1190,1195,1200,1205,1211,1217,1223,1228,1241,1254,1259,1266,1290,1295,1306,1323,1354,1367,1378,1383,1388,1393,1399,1405,1410,1421,1432,1437,1454,1459,1465,1504,1510,1516,1556,1562,1591,1597,1616,1630,1635],{"__ignoreMap":461},[465,723,724,726],{"class":467,"line":468},[465,725,472],{"class":471},[465,727,728],{"class":475}," app.game.rpg.ui.components.delegates;\n",[465,730,731],{"class":467,"line":479},[465,732,483],{"emptyLinePlaceholder":482},[465,734,735,737],{"class":467,"line":486},[465,736,489],{"class":471},[465,738,739],{"class":475}," app.game.rpg.ui.components.borders.RPGRoundedBorder;\n",[465,741,742],{"class":467,"line":495},[465,743,483],{"emptyLinePlaceholder":482},[465,745,746,748,750,752],{"class":467,"line":500},[465,747,489],{"class":471},[465,749,505],{"class":475},[465,751,509],{"class":508},[465,753,512],{"class":475},[465,755,756,758],{"class":467,"line":515},[465,757,489],{"class":471},[465,759,760],{"class":475}," javax.swing.border.CompoundBorder;\n",[465,762,763,765],{"class":467,"line":527},[465,764,489],{"class":471},[465,766,767],{"class":475}," javax.swing.border.EmptyBorder;\n",[465,769,770,772],{"class":467,"line":532},[465,771,489],{"class":471},[465,773,774],{"class":475}," javax.swing.plaf.basic.BasicPanelUI;\n",[465,776,777,779,781,783],{"class":467,"line":539},[465,778,489],{"class":471},[465,780,520],{"class":475},[465,782,509],{"class":508},[465,784,512],{"class":475},[465,786,787],{"class":467,"line":545},[465,788,483],{"emptyLinePlaceholder":482},[465,790,791],{"class":467,"line":551},[465,792,536],{"class":535},[465,794,795],{"class":467,"line":557},[465,796,797],{"class":535}," * RPGPanelUI es una clase personalizada que extiende BasicPanelUI para proporcionar un panel con un borde redondeado\n",[465,799,800],{"class":467,"line":563},[465,801,548],{"class":535},[465,803,804],{"class":467,"line":569},[465,805,554],{"class":535},[465,807,808],{"class":467,"line":591},[465,809,560],{"class":535},[465,811,812],{"class":467,"line":596},[465,813,566],{"class":535},[465,815,816,818,820,822,824,827],{"class":467,"line":602},[465,817,572],{"class":471},[465,819,575],{"class":471},[465,821,684],{"class":578},[465,823,582],{"class":471},[465,825,826],{"class":578}," BasicPanelUI",[465,828,588],{"class":475},[465,830,831],{"class":467,"line":608},[465,832,483],{"emptyLinePlaceholder":482},[465,834,835],{"class":467,"line":614},[465,836,599],{"class":535},[465,838,839],{"class":467,"line":630},[465,840,841],{"class":535},"     * Color inicial del degradado del panel RPGPanelUI\n",[465,843,844],{"class":467,"line":643},[465,845,646],{"class":535},[465,847,848,851,854],{"class":467,"line":649},[465,849,850],{"class":471},"    protected",[465,852,853],{"class":471}," final",[465,855,856],{"class":475}," Color startColor;\n",[465,858,859],{"class":467,"line":672},[465,860,599],{"class":535},[465,862,863],{"class":467,"line":690},[465,864,865],{"class":535},"     * Color final del degradado del panel RPGPanelUI\n",[465,867,868],{"class":467,"line":696},[465,869,646],{"class":535},[465,871,873,875,877],{"class":467,"line":872},26,[465,874,850],{"class":471},[465,876,853],{"class":471},[465,878,879],{"class":475}," Color endColor;\n",[465,881,883],{"class":467,"line":882},27,[465,884,483],{"emptyLinePlaceholder":482},[465,886,888],{"class":467,"line":887},28,[465,889,599],{"class":535},[465,891,893],{"class":467,"line":892},29,[465,894,895],{"class":535},"     * Constructor para crear un objeto RPGPanelUI con el color de inicio y final del degradado.\n",[465,897,899],{"class":467,"line":898},30,[465,900,611],{"class":535},[465,902,904,906,908,910],{"class":467,"line":903},31,[465,905,617],{"class":535},[465,907,620],{"class":471},[465,909,624],{"class":623},[465,911,912],{"class":535}," Color inicial seleccionado para el degradado del panel RPGPanelUI.\n",[465,914,916,918,920,922],{"class":467,"line":915},32,[465,917,617],{"class":535},[465,919,620],{"class":471},[465,921,637],{"class":623},[465,923,924],{"class":535},"   Color final seleccionado para el degradado del panel RPGPanelUI.\n",[465,926,928],{"class":467,"line":927},33,[465,929,646],{"class":535},[465,931,933,935,937,939,941,943,945],{"class":467,"line":932},34,[465,934,652],{"class":471},[465,936,684],{"class":578},[465,938,657],{"class":475},[465,940,660],{"class":623},[465,942,663],{"class":475},[465,944,666],{"class":623},[465,946,669],{"class":475},[465,948,950,953,956,959],{"class":467,"line":949},35,[465,951,952],{"class":508},"        this",[465,954,955],{"class":475},".startColor ",[465,957,958],{"class":471},"=",[465,960,961],{"class":475}," startColor;\n",[465,963,965,967,970,972],{"class":467,"line":964},36,[465,966,952],{"class":508},[465,968,969],{"class":475},".endColor ",[465,971,958],{"class":471},[465,973,974],{"class":475}," endColor;\n",[465,976,978],{"class":467,"line":977},37,[465,979,693],{"class":475},[465,981,983],{"class":467,"line":982},38,[465,984,483],{"emptyLinePlaceholder":482},[465,986,988],{"class":467,"line":987},39,[465,989,599],{"class":535},[465,991,993],{"class":467,"line":992},40,[465,994,995],{"class":535},"     * Función que permite aplicar características por defecto a un JPanel. En nuestro caso, instalamos un borde\n",[465,997,999],{"class":467,"line":998},41,[465,1000,1001],{"class":535},"     * compuesto de un borde redondeado y un borde vacío (padding interno), eliminamos su opacidad y un layout box\n",[465,1003,1005],{"class":467,"line":1004},42,[465,1006,1007],{"class":535},"     * para que los componentes a agregar se coloquen de forma vertical.\n",[465,1009,1011],{"class":467,"line":1010},43,[465,1012,611],{"class":535},[465,1014,1016,1018,1020,1023],{"class":467,"line":1015},44,[465,1017,617],{"class":535},[465,1019,620],{"class":471},[465,1021,1022],{"class":623}," p",[465,1024,1025],{"class":535}," an instance of {@code JPanel}\n",[465,1027,1029],{"class":467,"line":1028},45,[465,1030,646],{"class":535},[465,1032,1034,1037],{"class":467,"line":1033},46,[465,1035,1036],{"class":475},"    @",[465,1038,1039],{"class":471},"Override\n",[465,1041,1043,1045,1048,1051,1054,1056],{"class":467,"line":1042},47,[465,1044,850],{"class":471},[465,1046,1047],{"class":471}," void",[465,1049,1050],{"class":578}," installDefaults",[465,1052,1053],{"class":475},"(JPanel ",[465,1055,423],{"class":623},[465,1057,669],{"class":475},[465,1059,1061],{"class":467,"line":1060},48,[465,1062,483],{"emptyLinePlaceholder":482},[465,1064,1066,1069,1072,1075],{"class":467,"line":1065},49,[465,1067,1068],{"class":508},"        super",[465,1070,1071],{"class":475},".",[465,1073,1074],{"class":578},"installDefaults",[465,1076,1077],{"class":475},"(p);\n",[465,1079,1081,1084,1086,1089,1092,1094,1097,1100,1103],{"class":467,"line":1080},50,[465,1082,1083],{"class":475},"        RPGRoundedBorder border ",[465,1085,958],{"class":471},[465,1087,1088],{"class":471}," new",[465,1090,1091],{"class":578}," RPGRoundedBorder",[465,1093,678],{"class":475},[465,1095,1096],{"class":508},"5",[465,1098,1099],{"class":475},", ",[465,1101,1102],{"class":508},"0",[465,1104,1105],{"class":475},");\n",[465,1107,1109,1112,1114,1116,1119,1121,1124,1126,1128,1130,1132,1134,1136],{"class":467,"line":1108},51,[465,1110,1111],{"class":475},"        EmptyBorder emptyBorder ",[465,1113,958],{"class":471},[465,1115,1088],{"class":471},[465,1117,1118],{"class":578}," EmptyBorder",[465,1120,678],{"class":475},[465,1122,1123],{"class":508},"10",[465,1125,1099],{"class":475},[465,1127,1123],{"class":508},[465,1129,1099],{"class":475},[465,1131,1123],{"class":508},[465,1133,1099],{"class":475},[465,1135,1123],{"class":508},[465,1137,1105],{"class":475},[465,1139,1141,1144,1147,1149,1152],{"class":467,"line":1140},52,[465,1142,1143],{"class":475},"        p.",[465,1145,1146],{"class":578},"setOpaque",[465,1148,678],{"class":475},[465,1150,1151],{"class":508},"false",[465,1153,1105],{"class":475},[465,1155,1157,1159,1162,1164,1166,1169],{"class":467,"line":1156},53,[465,1158,1143],{"class":475},[465,1160,1161],{"class":578},"setBorder",[465,1163,678],{"class":475},[465,1165,681],{"class":471},[465,1167,1168],{"class":578}," CompoundBorder",[465,1170,1171],{"class":475},"(border, emptyBorder));\n",[465,1173,1175,1177,1180,1182,1184,1187],{"class":467,"line":1174},54,[465,1176,1143],{"class":475},[465,1178,1179],{"class":578},"setLayout",[465,1181,678],{"class":475},[465,1183,681],{"class":471},[465,1185,1186],{"class":578}," BoxLayout",[465,1188,1189],{"class":475},"(p, BoxLayout.Y_AXIS));\n",[465,1191,1193],{"class":467,"line":1192},55,[465,1194,693],{"class":475},[465,1196,1198],{"class":467,"line":1197},56,[465,1199,483],{"emptyLinePlaceholder":482},[465,1201,1203],{"class":467,"line":1202},57,[465,1204,599],{"class":535},[465,1206,1208],{"class":467,"line":1207},58,[465,1209,1210],{"class":535},"     * Función que permite dibujar el fondo degradado del panel RPGPanelUI en un componente {@code JComponent}.\n",[465,1212,1214],{"class":467,"line":1213},59,[465,1215,1216],{"class":535},"     * En nuestro caso usamos un degradado radial para dibujar una textura circular con un color inicial y final,\n",[465,1218,1220],{"class":467,"line":1219},60,[465,1221,1222],{"class":535},"     * sin embargo, esto puede modificarse y\u002Fo agregarse diversos modelos de degradado dado por ejemplo de un Enum.\n",[465,1224,1226],{"class":467,"line":1225},61,[465,1227,611],{"class":535},[465,1229,1231,1233,1235,1238],{"class":467,"line":1230},62,[465,1232,617],{"class":535},[465,1234,620],{"class":471},[465,1236,1237],{"class":623}," g",[465,1239,1240],{"class":535}," Elemento \u003Ccode>Graphics\u003C\u002Fcode> del componente a dibujar el fondo degradado.\n",[465,1242,1244,1246,1248,1251],{"class":467,"line":1243},63,[465,1245,617],{"class":535},[465,1247,620],{"class":471},[465,1249,1250],{"class":623}," c",[465,1252,1253],{"class":535}," Componente que se va a dibujar el fondo degradado del panel RPGPanelUI.\n",[465,1255,1257],{"class":467,"line":1256},64,[465,1258,646],{"class":535},[465,1260,1262,1264],{"class":467,"line":1261},65,[465,1263,1036],{"class":475},[465,1265,1039],{"class":471},[465,1267,1269,1271,1273,1276,1279,1282,1285,1288],{"class":467,"line":1268},66,[465,1270,652],{"class":471},[465,1272,1047],{"class":471},[465,1274,1275],{"class":578}," paint",[465,1277,1278],{"class":475},"(Graphics ",[465,1280,1281],{"class":623},"g",[465,1283,1284],{"class":475},", JComponent ",[465,1286,1287],{"class":623},"c",[465,1289,669],{"class":475},[465,1291,1293],{"class":467,"line":1292},67,[465,1294,483],{"emptyLinePlaceholder":482},[465,1296,1298,1301,1303],{"class":467,"line":1297},68,[465,1299,1300],{"class":475},"        Graphics2D g2d ",[465,1302,958],{"class":471},[465,1304,1305],{"class":475}," (Graphics2D) g;\n",[465,1307,1309,1312,1315,1317,1320],{"class":467,"line":1308},69,[465,1310,1311],{"class":475},"        g2d.",[465,1313,1314],{"class":578},"setPaint",[465,1316,678],{"class":475},[465,1318,1319],{"class":578},"getPaintMethod",[465,1321,1322],{"class":475},"(c));\n",[465,1324,1326,1328,1331,1333,1335,1337,1339,1342,1345,1348,1351],{"class":467,"line":1325},70,[465,1327,1311],{"class":475},[465,1329,1330],{"class":578},"fillRect",[465,1332,678],{"class":475},[465,1334,1102],{"class":508},[465,1336,1099],{"class":475},[465,1338,1102],{"class":508},[465,1340,1341],{"class":475},", c.",[465,1343,1344],{"class":578},"getWidth",[465,1346,1347],{"class":475},"(), c.",[465,1349,1350],{"class":578},"getHeight",[465,1352,1353],{"class":475},"());\n",[465,1355,1357,1359,1361,1364],{"class":467,"line":1356},71,[465,1358,1068],{"class":508},[465,1360,1071],{"class":475},[465,1362,1363],{"class":578},"paint",[465,1365,1366],{"class":475},"(g, c);\n",[465,1368,1370,1372,1375],{"class":467,"line":1369},72,[465,1371,1311],{"class":475},[465,1373,1374],{"class":578},"dispose",[465,1376,1377],{"class":475},"();\n",[465,1379,1381],{"class":467,"line":1380},73,[465,1382,693],{"class":475},[465,1384,1386],{"class":467,"line":1385},74,[465,1387,483],{"emptyLinePlaceholder":482},[465,1389,1391],{"class":467,"line":1390},75,[465,1392,599],{"class":535},[465,1394,1396],{"class":467,"line":1395},76,[465,1397,1398],{"class":535},"     * Función que en este caso devuelve un degradado radial. Si fuera necesario se puede modificar para incorporar\n",[465,1400,1402],{"class":467,"line":1401},77,[465,1403,1404],{"class":535},"     * otro tipo de degradados.\n",[465,1406,1408],{"class":467,"line":1407},78,[465,1409,611],{"class":535},[465,1411,1413,1415,1417,1419],{"class":467,"line":1412},79,[465,1414,617],{"class":535},[465,1416,620],{"class":471},[465,1418,1250],{"class":623},[465,1420,1253],{"class":535},[465,1422,1424,1426,1429],{"class":467,"line":1423},80,[465,1425,617],{"class":535},[465,1427,1428],{"class":471},"@return",[465,1430,1431],{"class":535}," El tipo Paint que va a representar el degradado.\n",[465,1433,1435],{"class":467,"line":1434},81,[465,1436,646],{"class":535},[465,1438,1440,1442,1445,1447,1450,1452],{"class":467,"line":1439},82,[465,1441,850],{"class":471},[465,1443,1444],{"class":475}," Paint ",[465,1446,1319],{"class":578},[465,1448,1449],{"class":475},"(JComponent ",[465,1451,1287],{"class":623},[465,1453,669],{"class":475},[465,1455,1457],{"class":467,"line":1456},83,[465,1458,483],{"emptyLinePlaceholder":482},[465,1460,1462],{"class":467,"line":1461},84,[465,1463,1464],{"class":535},"        \u002F\u002F Creamos un punto central en las coordenadas (x: width\u002F2, y: height\u002F2)\n",[465,1466,1468,1471,1473,1475,1478,1481,1483,1486,1489,1492,1494,1496,1498,1500,1502],{"class":467,"line":1467},85,[465,1469,1470],{"class":475},"        Point center ",[465,1472,958],{"class":471},[465,1474,1088],{"class":471},[465,1476,1477],{"class":578}," Point",[465,1479,1480],{"class":475},"(c.",[465,1482,1344],{"class":578},[465,1484,1485],{"class":475},"() ",[465,1487,1488],{"class":471},"\u002F",[465,1490,1491],{"class":508}," 2",[465,1493,1341],{"class":475},[465,1495,1350],{"class":578},[465,1497,1485],{"class":475},[465,1499,1488],{"class":471},[465,1501,1491],{"class":508},[465,1503,1105],{"class":475},[465,1505,1507],{"class":467,"line":1506},86,[465,1508,1509],{"class":535},"        \u002F\u002F Obtenemos el radio de dibujo obteniendo el máximo entre las dimensiones width y height del componente a\n",[465,1511,1513],{"class":467,"line":1512},87,[465,1514,1515],{"class":535},"        \u002F\u002F pintar y dividiendo el resultado entre dos\n",[465,1517,1519,1522,1525,1527,1530,1533,1536,1539,1541,1543,1545,1547,1550,1552,1554],{"class":467,"line":1518},88,[465,1520,1521],{"class":471},"        float",[465,1523,1524],{"class":475}," radius ",[465,1526,958],{"class":471},[465,1528,1529],{"class":475}," (",[465,1531,1532],{"class":471},"float",[465,1534,1535],{"class":475},") Math.",[465,1537,1538],{"class":578},"max",[465,1540,1480],{"class":475},[465,1542,1344],{"class":578},[465,1544,1347],{"class":475},[465,1546,1350],{"class":578},[465,1548,1549],{"class":475},"()) ",[465,1551,1488],{"class":471},[465,1553,1491],{"class":508},[465,1555,512],{"class":475},[465,1557,1559],{"class":467,"line":1558},89,[465,1560,1561],{"class":535},"        \u002F\u002F Creamos un arreglo de floats que indica el ratio en el que se van a repartir los colores inicial y final.\n",[465,1563,1565,1567,1570,1572,1574,1577,1580,1583,1585,1588],{"class":467,"line":1564},90,[465,1566,1521],{"class":471},[465,1568,1569],{"class":475},"[] colorsRatio ",[465,1571,958],{"class":471},[465,1573,1088],{"class":471},[465,1575,1576],{"class":471}," float",[465,1578,1579],{"class":475},"[]{",[465,1581,1582],{"class":508},"0f",[465,1584,1099],{"class":475},[465,1586,1587],{"class":508},"1f",[465,1589,1590],{"class":475},"};\n",[465,1592,1594],{"class":467,"line":1593},91,[465,1595,1596],{"class":535},"        \u002F\u002F Un arreglo de Color para almacenar los colores inicial y final\n",[465,1598,1600,1603,1606,1608,1610,1613],{"class":467,"line":1599},92,[465,1601,1602],{"class":471},"        Color",[465,1604,1605],{"class":475},"[] colors ",[465,1607,958],{"class":471},[465,1609,1088],{"class":471},[465,1611,1612],{"class":471}," Color",[465,1614,1615],{"class":475},"[]{startColor, endColor};\n",[465,1617,1619,1622,1624,1627],{"class":467,"line":1618},93,[465,1620,1621],{"class":471},"        return",[465,1623,1088],{"class":471},[465,1625,1626],{"class":578}," RadialGradientPaint",[465,1628,1629],{"class":475},"(center, radius, colorsRatio, colors);\n",[465,1631,1633],{"class":467,"line":1632},94,[465,1634,693],{"class":475},[465,1636,1638],{"class":467,"line":1637},95,[465,1639,699],{"class":475},[423,1641,702,1642,706,1644,1647,1648,1650,1651,1653],{},[447,1643,712],{},[447,1645,1646],{},"BasicPanelUI"," para personalizar la apariencia de nuestro panel. Implementamos un método ",[447,1649,1363],{}," para dibujar un fondo degradado y un método ",[447,1652,1074],{}," para configurar el diseño y el borde del panel.",[423,1655,1656,1657,1659,1660,1662],{},"Como podrás notar, el método ",[447,1658,1319],{}," devuelve un degradado radial, pero puedes modificarlo para usar otros tipos de degradados según tus necesidades. En otras palabras, podemos heredar esta clase y sobreescribir el método ",[447,1661,1319],{}," para crear diferentes estilos de paneles en nuestra interfaz.",[418,1664,1666],{"id":1665},"el-panel-de-información-del-personaje","El Panel de Información del Personaje",[423,1668,1669],{},"Ahora que tenemos nuestro panel personalizado, podemos crear un panel específico para mostrar la información del personaje. Este panel puede incluir elementos como el nombre del personaje, su nivel, salud, mana, y otras estadísticas relevantes. Aquí hay un ejemplo de cómo podríamos implementar este panel:",[452,1671,1672],{},[455,1673,1676],{"className":457,"code":1674,"filename":1675,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.panels;\n\nimport app.game.rpg.ui.components.buttons.RPGButton;\nimport app.game.rpg.ui.components.delegates.RPGBlueButtonUI;\nimport app.game.rpg.ui.components.delegates.RPGRedButtonUI;\nimport app.game.rpg.ui.components.labels.RPGLabel;\nimport app.game.rpg.ui.components.utils.RPGGradientType;\n\nimport javax.swing.border.TitledBorder;\nimport java.awt.*;\nimport java.io.File;\nimport java.io.IOException;\nimport java.util.Objects;\n\n\u002F**\n * Clase qué representa un slot, es decir una casilla en el que se puede colocar una partida guardada.\n *\u002F\npublic class RPGSlotPanel extends RPGPanel {\n\n    \u002F**\n     * Nombre del slot.\n     *\u002F\n    private final String slotName;\n\n    \u002F**\n     * Constructor de la clase RPGSlotPanel que recibe el nombre del slot.\n     *\n     * @param slotName Nombre del slot.\n     *\u002F\n    public RPGSlotPanel(String slotName) {\n        super(new Color(104, 0, 255, 255), new Color(39, 0, 95, 255));\n        this.slotName = slotName;\n        init();\n    }\n\n    \u002F**\n     * Función que inicializa el slot.\n     *\u002F\n    private void init() {\n\n        Font font = null;\n        try {\n            font = Font.createFont(Font.TRUETYPE_FONT, new File(Objects.requireNonNull(getClass().getResource(\"\u002Ffonts\u002FBoldPixels.ttf\")).getPath()));\n        } catch (FontFormatException | IOException e) {\n            throw new RuntimeException(e);\n        }\n        setBorder(new TitledBorder(getBorder(), slotName, TitledBorder.CENTER, TitledBorder.BELOW_TOP,\n                font.deriveFont(Font.PLAIN, 30f), Color.WHITE));\n        setLayout(new GridBagLayout());\n        addComponents();\n    }\n\n    \u002F**\n     * Función que agrega los componentes al slot.\n     *\u002F\n    private void addComponents() {\n        GridBagConstraints gbc = new GridBagConstraints();\n        gbc.gridx = 0;\n        gbc.gridy = 0;\n        gbc.gridwidth = 2;\n        gbc.gridheight = 1;\n        gbc.insets = new Insets(10,10,10,10);  \u002F\u002Ftop padding\n        gbc.fill = GridBagConstraints.BOTH;\n        gbc.anchor = GridBagConstraints.CENTER;\n\n        add(new RPGLabel(\"Nombre: \", RPGGradientType.NONE), gbc);\n        gbc.gridy++;\n        add(new RPGLabel(\"Nivel: \", RPGGradientType.NONE), gbc);\n        gbc.gridy++;\n        add(new RPGLabel(\"Vida:  X \u002F Y\", RPGGradientType.NONE), gbc);\n        gbc.gridy++;\n        add(new RPGLabel(\"Mana:  X \u002F Y\", RPGGradientType.NONE), gbc);\n        gbc.gridy++;\n        add(new RPGLabel(\"Experiencia: \", RPGGradientType.NONE), gbc);\n        gbc.gridy++;\n        gbc.gridwidth= 1;\n        add(new RPGButton(\"Cargar\"), gbc);\n        gbc.gridx++;\n        add(new RPGButton(\"Eliminar\", new RPGRedButtonUI()), gbc);\n        gbc.gridx++;\n        add(new RPGButton(\"Nueva Partida\", new RPGBlueButtonUI()), gbc);\n    }\n}\n","app.game.rpg.ui.components.panels.RPGSlotPanel.java",[447,1677,1678,1684,1688,1695,1702,1709,1716,1723,1727,1734,1744,1751,1758,1765,1769,1773,1778,1782,1797,1801,1805,1810,1814,1824,1828,1832,1837,1841,1853,1857,1871,1927,1939,1946,1950,1954,1958,1963,1967,1979,1983,1995,2002,2055,2071,2084,2089,2109,2126,2140,2147,2151,2155,2159,2164,2168,2179,2193,2205,2216,2227,2239,2274,2284,2294,2298,2318,2328,2345,2353,2370,2378,2395,2403,2420,2428,2439,2458,2467,2492,2500,2524,2528],{"__ignoreMap":461},[465,1679,1680,1682],{"class":467,"line":468},[465,1681,472],{"class":471},[465,1683,476],{"class":475},[465,1685,1686],{"class":467,"line":479},[465,1687,483],{"emptyLinePlaceholder":482},[465,1689,1690,1692],{"class":467,"line":486},[465,1691,489],{"class":471},[465,1693,1694],{"class":475}," app.game.rpg.ui.components.buttons.RPGButton;\n",[465,1696,1697,1699],{"class":467,"line":495},[465,1698,489],{"class":471},[465,1700,1701],{"class":475}," app.game.rpg.ui.components.delegates.RPGBlueButtonUI;\n",[465,1703,1704,1706],{"class":467,"line":500},[465,1705,489],{"class":471},[465,1707,1708],{"class":475}," app.game.rpg.ui.components.delegates.RPGRedButtonUI;\n",[465,1710,1711,1713],{"class":467,"line":515},[465,1712,489],{"class":471},[465,1714,1715],{"class":475}," app.game.rpg.ui.components.labels.RPGLabel;\n",[465,1717,1718,1720],{"class":467,"line":527},[465,1719,489],{"class":471},[465,1721,1722],{"class":475}," app.game.rpg.ui.components.utils.RPGGradientType;\n",[465,1724,1725],{"class":467,"line":532},[465,1726,483],{"emptyLinePlaceholder":482},[465,1728,1729,1731],{"class":467,"line":539},[465,1730,489],{"class":471},[465,1732,1733],{"class":475}," javax.swing.border.TitledBorder;\n",[465,1735,1736,1738,1740,1742],{"class":467,"line":545},[465,1737,489],{"class":471},[465,1739,520],{"class":475},[465,1741,509],{"class":508},[465,1743,512],{"class":475},[465,1745,1746,1748],{"class":467,"line":551},[465,1747,489],{"class":471},[465,1749,1750],{"class":475}," java.io.File;\n",[465,1752,1753,1755],{"class":467,"line":557},[465,1754,489],{"class":471},[465,1756,1757],{"class":475}," java.io.IOException;\n",[465,1759,1760,1762],{"class":467,"line":563},[465,1761,489],{"class":471},[465,1763,1764],{"class":475}," java.util.Objects;\n",[465,1766,1767],{"class":467,"line":569},[465,1768,483],{"emptyLinePlaceholder":482},[465,1770,1771],{"class":467,"line":591},[465,1772,536],{"class":535},[465,1774,1775],{"class":467,"line":596},[465,1776,1777],{"class":535}," * Clase qué representa un slot, es decir una casilla en el que se puede colocar una partida guardada.\n",[465,1779,1780],{"class":467,"line":602},[465,1781,566],{"class":535},[465,1783,1784,1786,1788,1791,1793,1795],{"class":467,"line":608},[465,1785,572],{"class":471},[465,1787,575],{"class":471},[465,1789,1790],{"class":578}," RPGSlotPanel",[465,1792,582],{"class":471},[465,1794,579],{"class":578},[465,1796,588],{"class":475},[465,1798,1799],{"class":467,"line":614},[465,1800,483],{"emptyLinePlaceholder":482},[465,1802,1803],{"class":467,"line":630},[465,1804,599],{"class":535},[465,1806,1807],{"class":467,"line":643},[465,1808,1809],{"class":535},"     * Nombre del slot.\n",[465,1811,1812],{"class":467,"line":649},[465,1813,646],{"class":535},[465,1815,1816,1819,1821],{"class":467,"line":672},[465,1817,1818],{"class":471},"    private",[465,1820,853],{"class":471},[465,1822,1823],{"class":475}," String slotName;\n",[465,1825,1826],{"class":467,"line":690},[465,1827,483],{"emptyLinePlaceholder":482},[465,1829,1830],{"class":467,"line":696},[465,1831,599],{"class":535},[465,1833,1834],{"class":467,"line":872},[465,1835,1836],{"class":535},"     * Constructor de la clase RPGSlotPanel que recibe el nombre del slot.\n",[465,1838,1839],{"class":467,"line":882},[465,1840,611],{"class":535},[465,1842,1843,1845,1847,1850],{"class":467,"line":887},[465,1844,617],{"class":535},[465,1846,620],{"class":471},[465,1848,1849],{"class":623}," slotName",[465,1851,1852],{"class":535}," Nombre del slot.\n",[465,1854,1855],{"class":467,"line":892},[465,1856,646],{"class":535},[465,1858,1859,1861,1863,1866,1869],{"class":467,"line":898},[465,1860,652],{"class":471},[465,1862,1790],{"class":578},[465,1864,1865],{"class":475},"(String ",[465,1867,1868],{"class":623},"slotName",[465,1870,669],{"class":475},[465,1872,1873,1875,1877,1879,1881,1883,1886,1888,1890,1892,1895,1897,1899,1902,1904,1906,1908,1911,1913,1915,1917,1920,1922,1924],{"class":467,"line":903},[465,1874,1068],{"class":508},[465,1876,678],{"class":475},[465,1878,681],{"class":471},[465,1880,1612],{"class":578},[465,1882,678],{"class":475},[465,1884,1885],{"class":508},"104",[465,1887,1099],{"class":475},[465,1889,1102],{"class":508},[465,1891,1099],{"class":475},[465,1893,1894],{"class":508},"255",[465,1896,1099],{"class":475},[465,1898,1894],{"class":508},[465,1900,1901],{"class":475},"), ",[465,1903,681],{"class":471},[465,1905,1612],{"class":578},[465,1907,678],{"class":475},[465,1909,1910],{"class":508},"39",[465,1912,1099],{"class":475},[465,1914,1102],{"class":508},[465,1916,1099],{"class":475},[465,1918,1919],{"class":508},"95",[465,1921,1099],{"class":475},[465,1923,1894],{"class":508},[465,1925,1926],{"class":475},"));\n",[465,1928,1929,1931,1934,1936],{"class":467,"line":915},[465,1930,952],{"class":508},[465,1932,1933],{"class":475},".slotName ",[465,1935,958],{"class":471},[465,1937,1938],{"class":475}," slotName;\n",[465,1940,1941,1944],{"class":467,"line":927},[465,1942,1943],{"class":578},"        init",[465,1945,1377],{"class":475},[465,1947,1948],{"class":467,"line":932},[465,1949,693],{"class":475},[465,1951,1952],{"class":467,"line":949},[465,1953,483],{"emptyLinePlaceholder":482},[465,1955,1956],{"class":467,"line":964},[465,1957,599],{"class":535},[465,1959,1960],{"class":467,"line":977},[465,1961,1962],{"class":535},"     * Función que inicializa el slot.\n",[465,1964,1965],{"class":467,"line":982},[465,1966,646],{"class":535},[465,1968,1969,1971,1973,1976],{"class":467,"line":987},[465,1970,1818],{"class":471},[465,1972,1047],{"class":471},[465,1974,1975],{"class":578}," init",[465,1977,1978],{"class":475},"() {\n",[465,1980,1981],{"class":467,"line":992},[465,1982,483],{"emptyLinePlaceholder":482},[465,1984,1985,1988,1990,1993],{"class":467,"line":998},[465,1986,1987],{"class":475},"        Font font ",[465,1989,958],{"class":471},[465,1991,1992],{"class":508}," null",[465,1994,512],{"class":475},[465,1996,1997,2000],{"class":467,"line":1004},[465,1998,1999],{"class":471},"        try",[465,2001,588],{"class":475},[465,2003,2004,2007,2009,2012,2015,2018,2020,2023,2026,2029,2031,2034,2037,2040,2042,2046,2049,2052],{"class":467,"line":1010},[465,2005,2006],{"class":475},"            font ",[465,2008,958],{"class":471},[465,2010,2011],{"class":475}," Font.",[465,2013,2014],{"class":578},"createFont",[465,2016,2017],{"class":475},"(Font.TRUETYPE_FONT, ",[465,2019,681],{"class":471},[465,2021,2022],{"class":578}," File",[465,2024,2025],{"class":475},"(Objects.",[465,2027,2028],{"class":578},"requireNonNull",[465,2030,678],{"class":475},[465,2032,2033],{"class":578},"getClass",[465,2035,2036],{"class":475},"().",[465,2038,2039],{"class":578},"getResource",[465,2041,678],{"class":475},[465,2043,2045],{"class":2044},"sU2Wk","\"\u002Ffonts\u002FBoldPixels.ttf\"",[465,2047,2048],{"class":475},")).",[465,2050,2051],{"class":578},"getPath",[465,2053,2054],{"class":475},"()));\n",[465,2056,2057,2060,2063,2066,2069],{"class":467,"line":1015},[465,2058,2059],{"class":475},"        } ",[465,2061,2062],{"class":471},"catch",[465,2064,2065],{"class":475}," (FontFormatException | IOException ",[465,2067,2068],{"class":623},"e",[465,2070,669],{"class":475},[465,2072,2073,2076,2078,2081],{"class":467,"line":1028},[465,2074,2075],{"class":471},"            throw",[465,2077,1088],{"class":471},[465,2079,2080],{"class":578}," RuntimeException",[465,2082,2083],{"class":475},"(e);\n",[465,2085,2086],{"class":467,"line":1033},[465,2087,2088],{"class":475},"        }\n",[465,2090,2091,2094,2096,2098,2101,2103,2106],{"class":467,"line":1042},[465,2092,2093],{"class":578},"        setBorder",[465,2095,678],{"class":475},[465,2097,681],{"class":471},[465,2099,2100],{"class":578}," TitledBorder",[465,2102,678],{"class":475},[465,2104,2105],{"class":578},"getBorder",[465,2107,2108],{"class":475},"(), slotName, TitledBorder.CENTER, TitledBorder.BELOW_TOP,\n",[465,2110,2111,2114,2117,2120,2123],{"class":467,"line":1060},[465,2112,2113],{"class":475},"                font.",[465,2115,2116],{"class":578},"deriveFont",[465,2118,2119],{"class":475},"(Font.PLAIN, ",[465,2121,2122],{"class":508},"30f",[465,2124,2125],{"class":475},"), Color.WHITE));\n",[465,2127,2128,2131,2133,2135,2138],{"class":467,"line":1065},[465,2129,2130],{"class":578},"        setLayout",[465,2132,678],{"class":475},[465,2134,681],{"class":471},[465,2136,2137],{"class":578}," GridBagLayout",[465,2139,1353],{"class":475},[465,2141,2142,2145],{"class":467,"line":1080},[465,2143,2144],{"class":578},"        addComponents",[465,2146,1377],{"class":475},[465,2148,2149],{"class":467,"line":1108},[465,2150,693],{"class":475},[465,2152,2153],{"class":467,"line":1140},[465,2154,483],{"emptyLinePlaceholder":482},[465,2156,2157],{"class":467,"line":1156},[465,2158,599],{"class":535},[465,2160,2161],{"class":467,"line":1174},[465,2162,2163],{"class":535},"     * Función que agrega los componentes al slot.\n",[465,2165,2166],{"class":467,"line":1192},[465,2167,646],{"class":535},[465,2169,2170,2172,2174,2177],{"class":467,"line":1197},[465,2171,1818],{"class":471},[465,2173,1047],{"class":471},[465,2175,2176],{"class":578}," addComponents",[465,2178,1978],{"class":475},[465,2180,2181,2184,2186,2188,2191],{"class":467,"line":1202},[465,2182,2183],{"class":475},"        GridBagConstraints gbc ",[465,2185,958],{"class":471},[465,2187,1088],{"class":471},[465,2189,2190],{"class":578}," GridBagConstraints",[465,2192,1377],{"class":475},[465,2194,2195,2198,2200,2203],{"class":467,"line":1207},[465,2196,2197],{"class":475},"        gbc.gridx ",[465,2199,958],{"class":471},[465,2201,2202],{"class":508}," 0",[465,2204,512],{"class":475},[465,2206,2207,2210,2212,2214],{"class":467,"line":1213},[465,2208,2209],{"class":475},"        gbc.gridy ",[465,2211,958],{"class":471},[465,2213,2202],{"class":508},[465,2215,512],{"class":475},[465,2217,2218,2221,2223,2225],{"class":467,"line":1219},[465,2219,2220],{"class":475},"        gbc.gridwidth ",[465,2222,958],{"class":471},[465,2224,1491],{"class":508},[465,2226,512],{"class":475},[465,2228,2229,2232,2234,2237],{"class":467,"line":1225},[465,2230,2231],{"class":475},"        gbc.gridheight ",[465,2233,958],{"class":471},[465,2235,2236],{"class":508}," 1",[465,2238,512],{"class":475},[465,2240,2241,2244,2246,2248,2251,2253,2255,2258,2260,2262,2264,2266,2268,2271],{"class":467,"line":1230},[465,2242,2243],{"class":475},"        gbc.insets ",[465,2245,958],{"class":471},[465,2247,1088],{"class":471},[465,2249,2250],{"class":578}," Insets",[465,2252,678],{"class":475},[465,2254,1123],{"class":508},[465,2256,2257],{"class":475},",",[465,2259,1123],{"class":508},[465,2261,2257],{"class":475},[465,2263,1123],{"class":508},[465,2265,2257],{"class":475},[465,2267,1123],{"class":508},[465,2269,2270],{"class":475},");  ",[465,2272,2273],{"class":535},"\u002F\u002Ftop padding\n",[465,2275,2276,2279,2281],{"class":467,"line":1243},[465,2277,2278],{"class":475},"        gbc.fill ",[465,2280,958],{"class":471},[465,2282,2283],{"class":475}," GridBagConstraints.BOTH;\n",[465,2285,2286,2289,2291],{"class":467,"line":1256},[465,2287,2288],{"class":475},"        gbc.anchor ",[465,2290,958],{"class":471},[465,2292,2293],{"class":475}," GridBagConstraints.CENTER;\n",[465,2295,2296],{"class":467,"line":1261},[465,2297,483],{"emptyLinePlaceholder":482},[465,2299,2300,2303,2305,2307,2310,2312,2315],{"class":467,"line":1268},[465,2301,2302],{"class":578},"        add",[465,2304,678],{"class":475},[465,2306,681],{"class":471},[465,2308,2309],{"class":578}," RPGLabel",[465,2311,678],{"class":475},[465,2313,2314],{"class":2044},"\"Nombre: \"",[465,2316,2317],{"class":475},", RPGGradientType.NONE), gbc);\n",[465,2319,2320,2323,2326],{"class":467,"line":1292},[465,2321,2322],{"class":475},"        gbc.gridy",[465,2324,2325],{"class":471},"++",[465,2327,512],{"class":475},[465,2329,2330,2332,2334,2336,2338,2340,2343],{"class":467,"line":1297},[465,2331,2302],{"class":578},[465,2333,678],{"class":475},[465,2335,681],{"class":471},[465,2337,2309],{"class":578},[465,2339,678],{"class":475},[465,2341,2342],{"class":2044},"\"Nivel: \"",[465,2344,2317],{"class":475},[465,2346,2347,2349,2351],{"class":467,"line":1308},[465,2348,2322],{"class":475},[465,2350,2325],{"class":471},[465,2352,512],{"class":475},[465,2354,2355,2357,2359,2361,2363,2365,2368],{"class":467,"line":1325},[465,2356,2302],{"class":578},[465,2358,678],{"class":475},[465,2360,681],{"class":471},[465,2362,2309],{"class":578},[465,2364,678],{"class":475},[465,2366,2367],{"class":2044},"\"Vida:  X \u002F Y\"",[465,2369,2317],{"class":475},[465,2371,2372,2374,2376],{"class":467,"line":1356},[465,2373,2322],{"class":475},[465,2375,2325],{"class":471},[465,2377,512],{"class":475},[465,2379,2380,2382,2384,2386,2388,2390,2393],{"class":467,"line":1369},[465,2381,2302],{"class":578},[465,2383,678],{"class":475},[465,2385,681],{"class":471},[465,2387,2309],{"class":578},[465,2389,678],{"class":475},[465,2391,2392],{"class":2044},"\"Mana:  X \u002F Y\"",[465,2394,2317],{"class":475},[465,2396,2397,2399,2401],{"class":467,"line":1380},[465,2398,2322],{"class":475},[465,2400,2325],{"class":471},[465,2402,512],{"class":475},[465,2404,2405,2407,2409,2411,2413,2415,2418],{"class":467,"line":1385},[465,2406,2302],{"class":578},[465,2408,678],{"class":475},[465,2410,681],{"class":471},[465,2412,2309],{"class":578},[465,2414,678],{"class":475},[465,2416,2417],{"class":2044},"\"Experiencia: \"",[465,2419,2317],{"class":475},[465,2421,2422,2424,2426],{"class":467,"line":1390},[465,2423,2322],{"class":475},[465,2425,2325],{"class":471},[465,2427,512],{"class":475},[465,2429,2430,2433,2435,2437],{"class":467,"line":1395},[465,2431,2432],{"class":475},"        gbc.gridwidth",[465,2434,958],{"class":471},[465,2436,2236],{"class":508},[465,2438,512],{"class":475},[465,2440,2441,2443,2445,2447,2450,2452,2455],{"class":467,"line":1401},[465,2442,2302],{"class":578},[465,2444,678],{"class":475},[465,2446,681],{"class":471},[465,2448,2449],{"class":578}," RPGButton",[465,2451,678],{"class":475},[465,2453,2454],{"class":2044},"\"Cargar\"",[465,2456,2457],{"class":475},"), gbc);\n",[465,2459,2460,2463,2465],{"class":467,"line":1407},[465,2461,2462],{"class":475},"        gbc.gridx",[465,2464,2325],{"class":471},[465,2466,512],{"class":475},[465,2468,2469,2471,2473,2475,2477,2479,2482,2484,2486,2489],{"class":467,"line":1412},[465,2470,2302],{"class":578},[465,2472,678],{"class":475},[465,2474,681],{"class":471},[465,2476,2449],{"class":578},[465,2478,678],{"class":475},[465,2480,2481],{"class":2044},"\"Eliminar\"",[465,2483,1099],{"class":475},[465,2485,681],{"class":471},[465,2487,2488],{"class":578}," RPGRedButtonUI",[465,2490,2491],{"class":475},"()), gbc);\n",[465,2493,2494,2496,2498],{"class":467,"line":1423},[465,2495,2462],{"class":475},[465,2497,2325],{"class":471},[465,2499,512],{"class":475},[465,2501,2502,2504,2506,2508,2510,2512,2515,2517,2519,2522],{"class":467,"line":1434},[465,2503,2302],{"class":578},[465,2505,678],{"class":475},[465,2507,681],{"class":471},[465,2509,2449],{"class":578},[465,2511,678],{"class":475},[465,2513,2514],{"class":2044},"\"Nueva Partida\"",[465,2516,1099],{"class":475},[465,2518,681],{"class":471},[465,2520,2521],{"class":578}," RPGBlueButtonUI",[465,2523,2491],{"class":475},[465,2525,2526],{"class":467,"line":1439},[465,2527,693],{"class":475},[465,2529,2530],{"class":467,"line":1456},[465,2531,699],{"class":475},[423,2533,2534,2535,2538,2539,2541],{},"En este ejemplo, ",[447,2536,2537],{},"RPGSlotPanel"," es un panel que representa un slot de partida guardada. Utiliza la clase ",[447,2540,712],{}," para su apariencia y agrega varios componentes para mostrar la información del personaje, como su nombre, nivel, vida, mana y experiencia. También incluye botones para cargar, eliminar o crear una nueva partida. Puedes personalizar este panel aún más agregando más estadísticas o elementos visuales según las necesidades de tu juego.",[423,2543,2544,2545,2548,2549,2552],{},"Así mismo, podrás notar que este panel usa un ",[447,2546,2547],{},"GridBagLayout"," para organizar sus componentes, lo que permite una mayor flexibilidad en la disposición de los elementos dentro del panel. Puedes ajustar las restricciones del ",[447,2550,2551],{},"GridBagConstraints"," para cambiar la apariencia y el diseño de los componentes según tus preferencias.",[418,2554,2556],{"id":2555},"los-botones-personalizados","Los botones personalizados",[423,2558,2559],{},"Además de los paneles personalizados, también podemos crear botones personalizados para nuestra interfaz. Por ejemplo, podríamos crear un botón con un diseño específico para cargar una partida guardada o para eliminar una partida. Aquí hay un ejemplo de cómo podríamos implementar un botón personalizado:",[452,2561,2562],{},[455,2563,2566],{"className":457,"code":2564,"filename":2565,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.buttons;\n\nimport app.game.rpg.ui.components.delegates.RPGButtonUI;\n\nimport javax.swing.*;\n\npublic class RPGButton extends JButton {\n\n    public RPGButton(String text) {\n        super(text);\n        setUI(new RPGButtonUI());\n    }\n\n    public RPGButton(String text, RPGButtonUI ui) {\n        super(text);\n        setUI(ui);\n    }\n}\n","app.game.rpg.ui.components.buttons.RPGButton.java",[447,2567,2568,2575,2579,2586,2590,2600,2604,2619,2623,2636,2643,2656,2660,2664,2682,2688,2695,2699],{"__ignoreMap":461},[465,2569,2570,2572],{"class":467,"line":468},[465,2571,472],{"class":471},[465,2573,2574],{"class":475}," app.game.rpg.ui.components.buttons;\n",[465,2576,2577],{"class":467,"line":479},[465,2578,483],{"emptyLinePlaceholder":482},[465,2580,2581,2583],{"class":467,"line":486},[465,2582,489],{"class":471},[465,2584,2585],{"class":475}," app.game.rpg.ui.components.delegates.RPGButtonUI;\n",[465,2587,2588],{"class":467,"line":495},[465,2589,483],{"emptyLinePlaceholder":482},[465,2591,2592,2594,2596,2598],{"class":467,"line":500},[465,2593,489],{"class":471},[465,2595,505],{"class":475},[465,2597,509],{"class":508},[465,2599,512],{"class":475},[465,2601,2602],{"class":467,"line":515},[465,2603,483],{"emptyLinePlaceholder":482},[465,2605,2606,2608,2610,2612,2614,2617],{"class":467,"line":527},[465,2607,572],{"class":471},[465,2609,575],{"class":471},[465,2611,2449],{"class":578},[465,2613,582],{"class":471},[465,2615,2616],{"class":578}," JButton",[465,2618,588],{"class":475},[465,2620,2621],{"class":467,"line":532},[465,2622,483],{"emptyLinePlaceholder":482},[465,2624,2625,2627,2629,2631,2634],{"class":467,"line":539},[465,2626,652],{"class":471},[465,2628,2449],{"class":578},[465,2630,1865],{"class":475},[465,2632,2633],{"class":623},"text",[465,2635,669],{"class":475},[465,2637,2638,2640],{"class":467,"line":545},[465,2639,1068],{"class":508},[465,2641,2642],{"class":475},"(text);\n",[465,2644,2645,2647,2649,2651,2654],{"class":467,"line":551},[465,2646,675],{"class":578},[465,2648,678],{"class":475},[465,2650,681],{"class":471},[465,2652,2653],{"class":578}," RPGButtonUI",[465,2655,1353],{"class":475},[465,2657,2658],{"class":467,"line":557},[465,2659,693],{"class":475},[465,2661,2662],{"class":467,"line":563},[465,2663,483],{"emptyLinePlaceholder":482},[465,2665,2666,2668,2670,2672,2674,2677,2680],{"class":467,"line":569},[465,2667,652],{"class":471},[465,2669,2449],{"class":578},[465,2671,1865],{"class":475},[465,2673,2633],{"class":623},[465,2675,2676],{"class":475},", RPGButtonUI ",[465,2678,2679],{"class":623},"ui",[465,2681,669],{"class":475},[465,2683,2684,2686],{"class":467,"line":591},[465,2685,1068],{"class":508},[465,2687,2642],{"class":475},[465,2689,2690,2692],{"class":467,"line":596},[465,2691,675],{"class":578},[465,2693,2694],{"class":475},"(ui);\n",[465,2696,2697],{"class":467,"line":602},[465,2698,693],{"class":475},[465,2700,2701],{"class":467,"line":608},[465,2702,699],{"class":475},[423,2704,2534,2705,2708,2709,2712,2713,2716,2717,2719],{},[447,2706,2707],{},"RPGButton"," es una clase que extiende ",[447,2710,2711],{},"JButton"," y utiliza un ",[447,2714,2715],{},"RPGButtonUI"," para su apariencia. Puedes crear diferentes implementaciones de ",[447,2718,2715],{}," para tener botones con diferentes estilos, como un botón azul para crear una nueva partida o un botón rojo para eliminar una partida. Aquí hay un ejemplo de cómo podríamos implementar un botón verde personalizado:",[452,2721,2722],{},[455,2723,2726],{"className":457,"code":2724,"filename":2725,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.delegates;\n\nimport app.game.rpg.ui.components.borders.RPGRoundedBorder;\nimport app.game.rpg.utils.FontCache;\nimport app.game.rpg.utils.ColorPalette;\n\nimport javax.swing.*;\nimport javax.swing.border.CompoundBorder;\nimport javax.swing.border.EmptyBorder;\nimport javax.swing.plaf.basic.BasicButtonUI;\nimport java.awt.*;\nimport java.awt.event.MouseAdapter;\nimport java.awt.event.MouseEvent;\n\n\u002F**\n * Clase personalizada para el UI de los botones en el RPG.\n *\u002F\npublic class RPGButtonUI extends BasicButtonUI {\n\n    protected boolean hover = false;\n    protected boolean pressed = false;\n    private final int radius = 15;\n    protected Color top;\n    protected Color bottom;\n\n    \u002F**\n     * Instala los valores por defecto de los botones.\n     *\n     * @param b el botón al que se le aplicarán los estilos.\n     *\u002F\n    @Override\n    protected void installDefaults(AbstractButton b) {\n\n        FontCache.addFont(\"BoldPixels\", \"BoldPixels.ttf\");\n        b.setContentAreaFilled(false);\n        b.setFocusPainted(false);\n        b.setOpaque(false);\n        b.setForeground(Color.WHITE);\n        b.setCursor(new Cursor(Cursor.HAND_CURSOR));\n        b.setFont(FontCache.getFont(\"BoldPixels\").deriveFont(22f));\n        b.setBorder(new RPGRoundedBorder(3, radius));\n        b.setBorder(new CompoundBorder(b.getBorder(), new EmptyBorder(5, 15, 5, 15)));\n        b.setPreferredSize(new Dimension((int) Math.max(b.getPreferredSize().getWidth(), 100), (int) b.getPreferredSize().getHeight()));\n    }\n\n    \u002F**\n     * Función que agrega los listeners al botón.\n     *\n     * @param b botón al que se le agregarán los listeners.\n     *\u002F\n    @Override\n    protected void installListeners(AbstractButton b) {\n\n        b.addMouseListener(new MouseAdapter() {\n            @Override\n            public void mouseEntered(MouseEvent e) {\n                hover = true;\n                b.repaint();\n            }\n\n            @Override\n            public void mouseExited(MouseEvent e) {\n                hover = false;\n                pressed = false;\n                b.repaint();\n            }\n\n            @Override\n            public void mousePressed(MouseEvent e) {\n                pressed = true;\n                b.repaint();\n            }\n\n            @Override\n            public void mouseReleased(MouseEvent e) {\n                pressed = false;\n                b.repaint();\n            }\n        });\n    }\n\n    @Override\n    public void paint(Graphics g, JComponent c) {\n        Graphics2D g2 = (Graphics2D) g.create();\n\n        \u002F\u002F Suavizado\n        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\n                RenderingHints.VALUE_ANTIALIAS_ON);\n        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,\n                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);\n        int w = c.getWidth();\n        int h = c.getHeight();\n        \u002F\u002F 🎨 Selección de colores según estado\n        LinearGradientPaint gradient = getLinearGradientPaint(c);\n        g2.setPaint(gradient);\n        g2.fillRoundRect(0, 0, w, h, radius, radius);\n        \u002F\u002F ✨ Efecto de brillo superior (opcional pero muy RPG)\n        GradientPaint highlight = new GradientPaint(\n                0, 0, new Color(255, 255, 255, 100),\n                0, (float) h \u002F 2, new Color(255, 255, 255, 0)\n        );\n        g2.setPaint(highlight);\n        g2.fillRoundRect(2, 2, w - 4, h \u002F 2, radius, radius);\n        \u002F\u002F 🔤 Dibuja el texto encima\n        super.paint(g2, c);\n        g2.dispose();\n    }\n\n    private LinearGradientPaint getLinearGradientPaint(JComponent c) {\n\n        getColors();\n        \u002F\u002F 🔵 Fondo degradado\n        return new LinearGradientPaint(0, 0, 0, c.getHeight(),\n                new float[]{0f, 0.25f, 1f}, new Color[]{top, bottom, top});\n    }\n\n    protected void configureColors() {\n\n        if (pressed) {\n            top = ColorPalette.GREEN_PRESSED_TOP;\n            bottom = ColorPalette.GREEN_PRESSED_BOTTOM;\n        } else if (hover) {\n            top = ColorPalette.GREEN_HOVER_TOP;\n            bottom = ColorPalette.GREEN_HOVER_BOTTOM;\n        } else {\n            top = ColorPalette.GREEN_TOP;\n            bottom = ColorPalette.GREEN_BOTTOM;\n        }\n    }\n}\n","app.game.rpg.ui.components.delegates.RPGBlueButtonUI.java",[447,2727,2728,2734,2738,2744,2751,2758,2762,2772,2778,2784,2791,2801,2808,2815,2819,2823,2828,2832,2847,2851,2868,2883,2901,2908,2915,2919,2923,2928,2932,2944,2948,2954,2970,2974,2994,3008,3021,3033,3043,3060,3089,3109,3153,3207,3211,3215,3219,3224,3228,3239,3243,3249,3264,3268,3284,3291,3308,3320,3330,3335,3339,3345,3360,3370,3381,3389,3393,3397,3403,3418,3428,3436,3440,3444,3450,3465,3475,3483,3487,3492,3496,3500,3506,3524,3539,3543,3548,3559,3564,3573,3578,3595,3610,3615,3628,3637,3656,3662,3678,3713,3755,3761,3771,3806,3812,3824,3833,3838,3843,3860,3865,3873,3879,3908,3939,3944,3949,3961,3966,3975,3986,3997,4011,4021,4031,4040,4050,4060,4065,4070],{"__ignoreMap":461},[465,2729,2730,2732],{"class":467,"line":468},[465,2731,472],{"class":471},[465,2733,728],{"class":475},[465,2735,2736],{"class":467,"line":479},[465,2737,483],{"emptyLinePlaceholder":482},[465,2739,2740,2742],{"class":467,"line":486},[465,2741,489],{"class":471},[465,2743,739],{"class":475},[465,2745,2746,2748],{"class":467,"line":495},[465,2747,489],{"class":471},[465,2749,2750],{"class":475}," app.game.rpg.utils.FontCache;\n",[465,2752,2753,2755],{"class":467,"line":500},[465,2754,489],{"class":471},[465,2756,2757],{"class":475}," app.game.rpg.utils.ColorPalette;\n",[465,2759,2760],{"class":467,"line":515},[465,2761,483],{"emptyLinePlaceholder":482},[465,2763,2764,2766,2768,2770],{"class":467,"line":527},[465,2765,489],{"class":471},[465,2767,505],{"class":475},[465,2769,509],{"class":508},[465,2771,512],{"class":475},[465,2773,2774,2776],{"class":467,"line":532},[465,2775,489],{"class":471},[465,2777,760],{"class":475},[465,2779,2780,2782],{"class":467,"line":539},[465,2781,489],{"class":471},[465,2783,767],{"class":475},[465,2785,2786,2788],{"class":467,"line":545},[465,2787,489],{"class":471},[465,2789,2790],{"class":475}," javax.swing.plaf.basic.BasicButtonUI;\n",[465,2792,2793,2795,2797,2799],{"class":467,"line":551},[465,2794,489],{"class":471},[465,2796,520],{"class":475},[465,2798,509],{"class":508},[465,2800,512],{"class":475},[465,2802,2803,2805],{"class":467,"line":557},[465,2804,489],{"class":471},[465,2806,2807],{"class":475}," java.awt.event.MouseAdapter;\n",[465,2809,2810,2812],{"class":467,"line":563},[465,2811,489],{"class":471},[465,2813,2814],{"class":475}," java.awt.event.MouseEvent;\n",[465,2816,2817],{"class":467,"line":569},[465,2818,483],{"emptyLinePlaceholder":482},[465,2820,2821],{"class":467,"line":591},[465,2822,536],{"class":535},[465,2824,2825],{"class":467,"line":596},[465,2826,2827],{"class":535}," * Clase personalizada para el UI de los botones en el RPG.\n",[465,2829,2830],{"class":467,"line":602},[465,2831,566],{"class":535},[465,2833,2834,2836,2838,2840,2842,2845],{"class":467,"line":608},[465,2835,572],{"class":471},[465,2837,575],{"class":471},[465,2839,2653],{"class":578},[465,2841,582],{"class":471},[465,2843,2844],{"class":578}," BasicButtonUI",[465,2846,588],{"class":475},[465,2848,2849],{"class":467,"line":614},[465,2850,483],{"emptyLinePlaceholder":482},[465,2852,2853,2855,2858,2861,2863,2866],{"class":467,"line":630},[465,2854,850],{"class":471},[465,2856,2857],{"class":471}," boolean",[465,2859,2860],{"class":475}," hover ",[465,2862,958],{"class":471},[465,2864,2865],{"class":508}," false",[465,2867,512],{"class":475},[465,2869,2870,2872,2874,2877,2879,2881],{"class":467,"line":643},[465,2871,850],{"class":471},[465,2873,2857],{"class":471},[465,2875,2876],{"class":475}," pressed ",[465,2878,958],{"class":471},[465,2880,2865],{"class":508},[465,2882,512],{"class":475},[465,2884,2885,2887,2889,2892,2894,2896,2899],{"class":467,"line":649},[465,2886,1818],{"class":471},[465,2888,853],{"class":471},[465,2890,2891],{"class":471}," int",[465,2893,1524],{"class":475},[465,2895,958],{"class":471},[465,2897,2898],{"class":508}," 15",[465,2900,512],{"class":475},[465,2902,2903,2905],{"class":467,"line":672},[465,2904,850],{"class":471},[465,2906,2907],{"class":475}," Color top;\n",[465,2909,2910,2912],{"class":467,"line":690},[465,2911,850],{"class":471},[465,2913,2914],{"class":475}," Color bottom;\n",[465,2916,2917],{"class":467,"line":696},[465,2918,483],{"emptyLinePlaceholder":482},[465,2920,2921],{"class":467,"line":872},[465,2922,599],{"class":535},[465,2924,2925],{"class":467,"line":882},[465,2926,2927],{"class":535},"     * Instala los valores por defecto de los botones.\n",[465,2929,2930],{"class":467,"line":887},[465,2931,611],{"class":535},[465,2933,2934,2936,2938,2941],{"class":467,"line":892},[465,2935,617],{"class":535},[465,2937,620],{"class":471},[465,2939,2940],{"class":623}," b",[465,2942,2943],{"class":535}," el botón al que se le aplicarán los estilos.\n",[465,2945,2946],{"class":467,"line":898},[465,2947,646],{"class":535},[465,2949,2950,2952],{"class":467,"line":903},[465,2951,1036],{"class":475},[465,2953,1039],{"class":471},[465,2955,2956,2958,2960,2962,2965,2968],{"class":467,"line":915},[465,2957,850],{"class":471},[465,2959,1047],{"class":471},[465,2961,1050],{"class":578},[465,2963,2964],{"class":475},"(AbstractButton ",[465,2966,2967],{"class":623},"b",[465,2969,669],{"class":475},[465,2971,2972],{"class":467,"line":927},[465,2973,483],{"emptyLinePlaceholder":482},[465,2975,2976,2979,2982,2984,2987,2989,2992],{"class":467,"line":932},[465,2977,2978],{"class":475},"        FontCache.",[465,2980,2981],{"class":578},"addFont",[465,2983,678],{"class":475},[465,2985,2986],{"class":2044},"\"BoldPixels\"",[465,2988,1099],{"class":475},[465,2990,2991],{"class":2044},"\"BoldPixels.ttf\"",[465,2993,1105],{"class":475},[465,2995,2996,2999,3002,3004,3006],{"class":467,"line":949},[465,2997,2998],{"class":475},"        b.",[465,3000,3001],{"class":578},"setContentAreaFilled",[465,3003,678],{"class":475},[465,3005,1151],{"class":508},[465,3007,1105],{"class":475},[465,3009,3010,3012,3015,3017,3019],{"class":467,"line":964},[465,3011,2998],{"class":475},[465,3013,3014],{"class":578},"setFocusPainted",[465,3016,678],{"class":475},[465,3018,1151],{"class":508},[465,3020,1105],{"class":475},[465,3022,3023,3025,3027,3029,3031],{"class":467,"line":977},[465,3024,2998],{"class":475},[465,3026,1146],{"class":578},[465,3028,678],{"class":475},[465,3030,1151],{"class":508},[465,3032,1105],{"class":475},[465,3034,3035,3037,3040],{"class":467,"line":982},[465,3036,2998],{"class":475},[465,3038,3039],{"class":578},"setForeground",[465,3041,3042],{"class":475},"(Color.WHITE);\n",[465,3044,3045,3047,3050,3052,3054,3057],{"class":467,"line":987},[465,3046,2998],{"class":475},[465,3048,3049],{"class":578},"setCursor",[465,3051,678],{"class":475},[465,3053,681],{"class":471},[465,3055,3056],{"class":578}," Cursor",[465,3058,3059],{"class":475},"(Cursor.HAND_CURSOR));\n",[465,3061,3062,3064,3067,3070,3073,3075,3077,3080,3082,3084,3087],{"class":467,"line":992},[465,3063,2998],{"class":475},[465,3065,3066],{"class":578},"setFont",[465,3068,3069],{"class":475},"(FontCache.",[465,3071,3072],{"class":578},"getFont",[465,3074,678],{"class":475},[465,3076,2986],{"class":2044},[465,3078,3079],{"class":475},").",[465,3081,2116],{"class":578},[465,3083,678],{"class":475},[465,3085,3086],{"class":508},"22f",[465,3088,1926],{"class":475},[465,3090,3091,3093,3095,3097,3099,3101,3103,3106],{"class":467,"line":998},[465,3092,2998],{"class":475},[465,3094,1161],{"class":578},[465,3096,678],{"class":475},[465,3098,681],{"class":471},[465,3100,1091],{"class":578},[465,3102,678],{"class":475},[465,3104,3105],{"class":508},"3",[465,3107,3108],{"class":475},", radius));\n",[465,3110,3111,3113,3115,3117,3119,3121,3124,3126,3129,3131,3133,3135,3137,3139,3142,3144,3146,3148,3150],{"class":467,"line":1004},[465,3112,2998],{"class":475},[465,3114,1161],{"class":578},[465,3116,678],{"class":475},[465,3118,681],{"class":471},[465,3120,1168],{"class":578},[465,3122,3123],{"class":475},"(b.",[465,3125,2105],{"class":578},[465,3127,3128],{"class":475},"(), ",[465,3130,681],{"class":471},[465,3132,1118],{"class":578},[465,3134,678],{"class":475},[465,3136,1096],{"class":508},[465,3138,1099],{"class":475},[465,3140,3141],{"class":508},"15",[465,3143,1099],{"class":475},[465,3145,1096],{"class":508},[465,3147,1099],{"class":475},[465,3149,3141],{"class":508},[465,3151,3152],{"class":475},")));\n",[465,3154,3155,3157,3160,3162,3164,3167,3170,3173,3175,3177,3179,3182,3184,3186,3188,3191,3194,3196,3199,3201,3203,3205],{"class":467,"line":1010},[465,3156,2998],{"class":475},[465,3158,3159],{"class":578},"setPreferredSize",[465,3161,678],{"class":475},[465,3163,681],{"class":471},[465,3165,3166],{"class":578}," Dimension",[465,3168,3169],{"class":475},"((",[465,3171,3172],{"class":471},"int",[465,3174,1535],{"class":475},[465,3176,1538],{"class":578},[465,3178,3123],{"class":475},[465,3180,3181],{"class":578},"getPreferredSize",[465,3183,2036],{"class":475},[465,3185,1344],{"class":578},[465,3187,3128],{"class":475},[465,3189,3190],{"class":508},"100",[465,3192,3193],{"class":475},"), (",[465,3195,3172],{"class":471},[465,3197,3198],{"class":475},") b.",[465,3200,3181],{"class":578},[465,3202,2036],{"class":475},[465,3204,1350],{"class":578},[465,3206,2054],{"class":475},[465,3208,3209],{"class":467,"line":1015},[465,3210,693],{"class":475},[465,3212,3213],{"class":467,"line":1028},[465,3214,483],{"emptyLinePlaceholder":482},[465,3216,3217],{"class":467,"line":1033},[465,3218,599],{"class":535},[465,3220,3221],{"class":467,"line":1042},[465,3222,3223],{"class":535},"     * Función que agrega los listeners al botón.\n",[465,3225,3226],{"class":467,"line":1060},[465,3227,611],{"class":535},[465,3229,3230,3232,3234,3236],{"class":467,"line":1065},[465,3231,617],{"class":535},[465,3233,620],{"class":471},[465,3235,2940],{"class":623},[465,3237,3238],{"class":535}," botón al que se le agregarán los listeners.\n",[465,3240,3241],{"class":467,"line":1080},[465,3242,646],{"class":535},[465,3244,3245,3247],{"class":467,"line":1108},[465,3246,1036],{"class":475},[465,3248,1039],{"class":471},[465,3250,3251,3253,3255,3258,3260,3262],{"class":467,"line":1140},[465,3252,850],{"class":471},[465,3254,1047],{"class":471},[465,3256,3257],{"class":578}," installListeners",[465,3259,2964],{"class":475},[465,3261,2967],{"class":623},[465,3263,669],{"class":475},[465,3265,3266],{"class":467,"line":1156},[465,3267,483],{"emptyLinePlaceholder":482},[465,3269,3270,3272,3275,3277,3279,3282],{"class":467,"line":1174},[465,3271,2998],{"class":475},[465,3273,3274],{"class":578},"addMouseListener",[465,3276,678],{"class":475},[465,3278,681],{"class":471},[465,3280,3281],{"class":578}," MouseAdapter",[465,3283,1978],{"class":475},[465,3285,3286,3289],{"class":467,"line":1192},[465,3287,3288],{"class":475},"            @",[465,3290,1039],{"class":471},[465,3292,3293,3296,3298,3301,3304,3306],{"class":467,"line":1197},[465,3294,3295],{"class":471},"            public",[465,3297,1047],{"class":471},[465,3299,3300],{"class":578}," mouseEntered",[465,3302,3303],{"class":475},"(MouseEvent ",[465,3305,2068],{"class":623},[465,3307,669],{"class":475},[465,3309,3310,3313,3315,3318],{"class":467,"line":1202},[465,3311,3312],{"class":475},"                hover ",[465,3314,958],{"class":471},[465,3316,3317],{"class":508}," true",[465,3319,512],{"class":475},[465,3321,3322,3325,3328],{"class":467,"line":1207},[465,3323,3324],{"class":475},"                b.",[465,3326,3327],{"class":578},"repaint",[465,3329,1377],{"class":475},[465,3331,3332],{"class":467,"line":1213},[465,3333,3334],{"class":475},"            }\n",[465,3336,3337],{"class":467,"line":1219},[465,3338,483],{"emptyLinePlaceholder":482},[465,3340,3341,3343],{"class":467,"line":1225},[465,3342,3288],{"class":475},[465,3344,1039],{"class":471},[465,3346,3347,3349,3351,3354,3356,3358],{"class":467,"line":1230},[465,3348,3295],{"class":471},[465,3350,1047],{"class":471},[465,3352,3353],{"class":578}," mouseExited",[465,3355,3303],{"class":475},[465,3357,2068],{"class":623},[465,3359,669],{"class":475},[465,3361,3362,3364,3366,3368],{"class":467,"line":1243},[465,3363,3312],{"class":475},[465,3365,958],{"class":471},[465,3367,2865],{"class":508},[465,3369,512],{"class":475},[465,3371,3372,3375,3377,3379],{"class":467,"line":1256},[465,3373,3374],{"class":475},"                pressed ",[465,3376,958],{"class":471},[465,3378,2865],{"class":508},[465,3380,512],{"class":475},[465,3382,3383,3385,3387],{"class":467,"line":1261},[465,3384,3324],{"class":475},[465,3386,3327],{"class":578},[465,3388,1377],{"class":475},[465,3390,3391],{"class":467,"line":1268},[465,3392,3334],{"class":475},[465,3394,3395],{"class":467,"line":1292},[465,3396,483],{"emptyLinePlaceholder":482},[465,3398,3399,3401],{"class":467,"line":1297},[465,3400,3288],{"class":475},[465,3402,1039],{"class":471},[465,3404,3405,3407,3409,3412,3414,3416],{"class":467,"line":1308},[465,3406,3295],{"class":471},[465,3408,1047],{"class":471},[465,3410,3411],{"class":578}," mousePressed",[465,3413,3303],{"class":475},[465,3415,2068],{"class":623},[465,3417,669],{"class":475},[465,3419,3420,3422,3424,3426],{"class":467,"line":1325},[465,3421,3374],{"class":475},[465,3423,958],{"class":471},[465,3425,3317],{"class":508},[465,3427,512],{"class":475},[465,3429,3430,3432,3434],{"class":467,"line":1356},[465,3431,3324],{"class":475},[465,3433,3327],{"class":578},[465,3435,1377],{"class":475},[465,3437,3438],{"class":467,"line":1369},[465,3439,3334],{"class":475},[465,3441,3442],{"class":467,"line":1380},[465,3443,483],{"emptyLinePlaceholder":482},[465,3445,3446,3448],{"class":467,"line":1385},[465,3447,3288],{"class":475},[465,3449,1039],{"class":471},[465,3451,3452,3454,3456,3459,3461,3463],{"class":467,"line":1390},[465,3453,3295],{"class":471},[465,3455,1047],{"class":471},[465,3457,3458],{"class":578}," mouseReleased",[465,3460,3303],{"class":475},[465,3462,2068],{"class":623},[465,3464,669],{"class":475},[465,3466,3467,3469,3471,3473],{"class":467,"line":1395},[465,3468,3374],{"class":475},[465,3470,958],{"class":471},[465,3472,2865],{"class":508},[465,3474,512],{"class":475},[465,3476,3477,3479,3481],{"class":467,"line":1401},[465,3478,3324],{"class":475},[465,3480,3327],{"class":578},[465,3482,1377],{"class":475},[465,3484,3485],{"class":467,"line":1407},[465,3486,3334],{"class":475},[465,3488,3489],{"class":467,"line":1412},[465,3490,3491],{"class":475},"        });\n",[465,3493,3494],{"class":467,"line":1423},[465,3495,693],{"class":475},[465,3497,3498],{"class":467,"line":1434},[465,3499,483],{"emptyLinePlaceholder":482},[465,3501,3502,3504],{"class":467,"line":1439},[465,3503,1036],{"class":475},[465,3505,1039],{"class":471},[465,3507,3508,3510,3512,3514,3516,3518,3520,3522],{"class":467,"line":1456},[465,3509,652],{"class":471},[465,3511,1047],{"class":471},[465,3513,1275],{"class":578},[465,3515,1278],{"class":475},[465,3517,1281],{"class":623},[465,3519,1284],{"class":475},[465,3521,1287],{"class":623},[465,3523,669],{"class":475},[465,3525,3526,3529,3531,3534,3537],{"class":467,"line":1461},[465,3527,3528],{"class":475},"        Graphics2D g2 ",[465,3530,958],{"class":471},[465,3532,3533],{"class":475}," (Graphics2D) g.",[465,3535,3536],{"class":578},"create",[465,3538,1377],{"class":475},[465,3540,3541],{"class":467,"line":1467},[465,3542,483],{"emptyLinePlaceholder":482},[465,3544,3545],{"class":467,"line":1506},[465,3546,3547],{"class":535},"        \u002F\u002F Suavizado\n",[465,3549,3550,3553,3556],{"class":467,"line":1512},[465,3551,3552],{"class":475},"        g2.",[465,3554,3555],{"class":578},"setRenderingHint",[465,3557,3558],{"class":475},"(RenderingHints.KEY_ANTIALIASING,\n",[465,3560,3561],{"class":467,"line":1518},[465,3562,3563],{"class":475},"                RenderingHints.VALUE_ANTIALIAS_ON);\n",[465,3565,3566,3568,3570],{"class":467,"line":1558},[465,3567,3552],{"class":475},[465,3569,3555],{"class":578},[465,3571,3572],{"class":475},"(RenderingHints.KEY_TEXT_ANTIALIASING,\n",[465,3574,3575],{"class":467,"line":1564},[465,3576,3577],{"class":475},"                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);\n",[465,3579,3580,3583,3586,3588,3591,3593],{"class":467,"line":1593},[465,3581,3582],{"class":471},"        int",[465,3584,3585],{"class":475}," w ",[465,3587,958],{"class":471},[465,3589,3590],{"class":475}," c.",[465,3592,1344],{"class":578},[465,3594,1377],{"class":475},[465,3596,3597,3599,3602,3604,3606,3608],{"class":467,"line":1599},[465,3598,3582],{"class":471},[465,3600,3601],{"class":475}," h ",[465,3603,958],{"class":471},[465,3605,3590],{"class":475},[465,3607,1350],{"class":578},[465,3609,1377],{"class":475},[465,3611,3612],{"class":467,"line":1618},[465,3613,3614],{"class":535},"        \u002F\u002F 🎨 Selección de colores según estado\n",[465,3616,3617,3620,3622,3625],{"class":467,"line":1632},[465,3618,3619],{"class":475},"        LinearGradientPaint gradient ",[465,3621,958],{"class":471},[465,3623,3624],{"class":578}," getLinearGradientPaint",[465,3626,3627],{"class":475},"(c);\n",[465,3629,3630,3632,3634],{"class":467,"line":1637},[465,3631,3552],{"class":475},[465,3633,1314],{"class":578},[465,3635,3636],{"class":475},"(gradient);\n",[465,3638,3640,3642,3645,3647,3649,3651,3653],{"class":467,"line":3639},96,[465,3641,3552],{"class":475},[465,3643,3644],{"class":578},"fillRoundRect",[465,3646,678],{"class":475},[465,3648,1102],{"class":508},[465,3650,1099],{"class":475},[465,3652,1102],{"class":508},[465,3654,3655],{"class":475},", w, h, radius, radius);\n",[465,3657,3659],{"class":467,"line":3658},97,[465,3660,3661],{"class":535},"        \u002F\u002F ✨ Efecto de brillo superior (opcional pero muy RPG)\n",[465,3663,3665,3668,3670,3672,3675],{"class":467,"line":3664},98,[465,3666,3667],{"class":475},"        GradientPaint highlight ",[465,3669,958],{"class":471},[465,3671,1088],{"class":471},[465,3673,3674],{"class":578}," GradientPaint",[465,3676,3677],{"class":475},"(\n",[465,3679,3681,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710],{"class":467,"line":3680},99,[465,3682,3683],{"class":508},"                0",[465,3685,1099],{"class":475},[465,3687,1102],{"class":508},[465,3689,1099],{"class":475},[465,3691,681],{"class":471},[465,3693,1612],{"class":578},[465,3695,678],{"class":475},[465,3697,1894],{"class":508},[465,3699,1099],{"class":475},[465,3701,1894],{"class":508},[465,3703,1099],{"class":475},[465,3705,1894],{"class":508},[465,3707,1099],{"class":475},[465,3709,3190],{"class":508},[465,3711,3712],{"class":475},"),\n",[465,3714,3716,3718,3721,3723,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748,3750,3752],{"class":467,"line":3715},100,[465,3717,3683],{"class":508},[465,3719,3720],{"class":475},", (",[465,3722,1532],{"class":471},[465,3724,3725],{"class":475},") h ",[465,3727,1488],{"class":471},[465,3729,1491],{"class":508},[465,3731,1099],{"class":475},[465,3733,681],{"class":471},[465,3735,1612],{"class":578},[465,3737,678],{"class":475},[465,3739,1894],{"class":508},[465,3741,1099],{"class":475},[465,3743,1894],{"class":508},[465,3745,1099],{"class":475},[465,3747,1894],{"class":508},[465,3749,1099],{"class":475},[465,3751,1102],{"class":508},[465,3753,3754],{"class":475},")\n",[465,3756,3758],{"class":467,"line":3757},101,[465,3759,3760],{"class":475},"        );\n",[465,3762,3764,3766,3768],{"class":467,"line":3763},102,[465,3765,3552],{"class":475},[465,3767,1314],{"class":578},[465,3769,3770],{"class":475},"(highlight);\n",[465,3772,3774,3776,3778,3780,3783,3785,3787,3790,3793,3796,3799,3801,3803],{"class":467,"line":3773},103,[465,3775,3552],{"class":475},[465,3777,3644],{"class":578},[465,3779,678],{"class":475},[465,3781,3782],{"class":508},"2",[465,3784,1099],{"class":475},[465,3786,3782],{"class":508},[465,3788,3789],{"class":475},", w ",[465,3791,3792],{"class":471},"-",[465,3794,3795],{"class":508}," 4",[465,3797,3798],{"class":475},", h ",[465,3800,1488],{"class":471},[465,3802,1491],{"class":508},[465,3804,3805],{"class":475},", radius, radius);\n",[465,3807,3809],{"class":467,"line":3808},104,[465,3810,3811],{"class":535},"        \u002F\u002F 🔤 Dibuja el texto encima\n",[465,3813,3815,3817,3819,3821],{"class":467,"line":3814},105,[465,3816,1068],{"class":508},[465,3818,1071],{"class":475},[465,3820,1363],{"class":578},[465,3822,3823],{"class":475},"(g2, c);\n",[465,3825,3827,3829,3831],{"class":467,"line":3826},106,[465,3828,3552],{"class":475},[465,3830,1374],{"class":578},[465,3832,1377],{"class":475},[465,3834,3836],{"class":467,"line":3835},107,[465,3837,693],{"class":475},[465,3839,3841],{"class":467,"line":3840},108,[465,3842,483],{"emptyLinePlaceholder":482},[465,3844,3846,3848,3851,3854,3856,3858],{"class":467,"line":3845},109,[465,3847,1818],{"class":471},[465,3849,3850],{"class":475}," LinearGradientPaint ",[465,3852,3853],{"class":578},"getLinearGradientPaint",[465,3855,1449],{"class":475},[465,3857,1287],{"class":623},[465,3859,669],{"class":475},[465,3861,3863],{"class":467,"line":3862},110,[465,3864,483],{"emptyLinePlaceholder":482},[465,3866,3868,3871],{"class":467,"line":3867},111,[465,3869,3870],{"class":578},"        getColors",[465,3872,1377],{"class":475},[465,3874,3876],{"class":467,"line":3875},112,[465,3877,3878],{"class":535},"        \u002F\u002F 🔵 Fondo degradado\n",[465,3880,3882,3884,3886,3889,3891,3893,3895,3897,3899,3901,3903,3905],{"class":467,"line":3881},113,[465,3883,1621],{"class":471},[465,3885,1088],{"class":471},[465,3887,3888],{"class":578}," LinearGradientPaint",[465,3890,678],{"class":475},[465,3892,1102],{"class":508},[465,3894,1099],{"class":475},[465,3896,1102],{"class":508},[465,3898,1099],{"class":475},[465,3900,1102],{"class":508},[465,3902,1341],{"class":475},[465,3904,1350],{"class":578},[465,3906,3907],{"class":475},"(),\n",[465,3909,3911,3914,3916,3918,3920,3922,3925,3927,3929,3932,3934,3936],{"class":467,"line":3910},114,[465,3912,3913],{"class":471},"                new",[465,3915,1576],{"class":471},[465,3917,1579],{"class":475},[465,3919,1582],{"class":508},[465,3921,1099],{"class":475},[465,3923,3924],{"class":508},"0.25f",[465,3926,1099],{"class":475},[465,3928,1587],{"class":508},[465,3930,3931],{"class":475},"}, ",[465,3933,681],{"class":471},[465,3935,1612],{"class":471},[465,3937,3938],{"class":475},"[]{top, bottom, top});\n",[465,3940,3942],{"class":467,"line":3941},115,[465,3943,693],{"class":475},[465,3945,3947],{"class":467,"line":3946},116,[465,3948,483],{"emptyLinePlaceholder":482},[465,3950,3952,3954,3956,3959],{"class":467,"line":3951},117,[465,3953,850],{"class":471},[465,3955,1047],{"class":471},[465,3957,3958],{"class":578}," configureColors",[465,3960,1978],{"class":475},[465,3962,3964],{"class":467,"line":3963},118,[465,3965,483],{"emptyLinePlaceholder":482},[465,3967,3969,3972],{"class":467,"line":3968},119,[465,3970,3971],{"class":471},"        if",[465,3973,3974],{"class":475}," (pressed) {\n",[465,3976,3978,3981,3983],{"class":467,"line":3977},120,[465,3979,3980],{"class":475},"            top ",[465,3982,958],{"class":471},[465,3984,3985],{"class":475}," ColorPalette.GREEN_PRESSED_TOP;\n",[465,3987,3989,3992,3994],{"class":467,"line":3988},121,[465,3990,3991],{"class":475},"            bottom ",[465,3993,958],{"class":471},[465,3995,3996],{"class":475}," ColorPalette.GREEN_PRESSED_BOTTOM;\n",[465,3998,4000,4002,4005,4008],{"class":467,"line":3999},122,[465,4001,2059],{"class":475},[465,4003,4004],{"class":471},"else",[465,4006,4007],{"class":471}," if",[465,4009,4010],{"class":475}," (hover) {\n",[465,4012,4014,4016,4018],{"class":467,"line":4013},123,[465,4015,3980],{"class":475},[465,4017,958],{"class":471},[465,4019,4020],{"class":475}," ColorPalette.GREEN_HOVER_TOP;\n",[465,4022,4024,4026,4028],{"class":467,"line":4023},124,[465,4025,3991],{"class":475},[465,4027,958],{"class":471},[465,4029,4030],{"class":475}," ColorPalette.GREEN_HOVER_BOTTOM;\n",[465,4032,4034,4036,4038],{"class":467,"line":4033},125,[465,4035,2059],{"class":475},[465,4037,4004],{"class":471},[465,4039,588],{"class":475},[465,4041,4043,4045,4047],{"class":467,"line":4042},126,[465,4044,3980],{"class":475},[465,4046,958],{"class":471},[465,4048,4049],{"class":475}," ColorPalette.GREEN_TOP;\n",[465,4051,4053,4055,4057],{"class":467,"line":4052},127,[465,4054,3991],{"class":475},[465,4056,958],{"class":471},[465,4058,4059],{"class":475}," ColorPalette.GREEN_BOTTOM;\n",[465,4061,4063],{"class":467,"line":4062},128,[465,4064,2088],{"class":475},[465,4066,4068],{"class":467,"line":4067},129,[465,4069,693],{"class":475},[465,4071,4073],{"class":467,"line":4072},130,[465,4074,699],{"class":475},[423,4076,2534,4077,2708,4079,4082],{},[447,4078,2715],{},[447,4080,4081],{},"BasicButtonUI"," y personaliza la apariencia de los botones. Utiliza un degradado para el fondo del botón y cambia los colores según el estado del botón (normal, hover o pressed). También agrega un efecto de brillo en la parte superior del botón para darle un aspecto más atractivo. Puedes crear otras clases similares para diferentes estilos de botones, como un botón rojo para eliminar una partida o un botón azul para crear una nueva partida.",[423,4084,4085,4086,4089],{},"Por ejemplo, podríamos crear un ",[447,4087,4088],{},"RPGRedButtonUI"," para los botones de eliminación:",[452,4091,4092],{},[455,4093,4096],{"className":457,"code":4094,"filename":4095,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.delegates;\n\nimport app.game.rpg.utils.ColorPalette;\n\npublic class RPGRedButtonUI extends RPGButtonUI{\n\n    @Override\n    protected void configureColors() {\n\n        if (pressed) {\n            top = ColorPalette.RED_TOP;\n            bottom = ColorPalette.RED_BOTTOM;\n        } else if (hover) {\n            top = ColorPalette.RED_HOVER_TOP;\n            bottom = ColorPalette.RED_HOVER_BOTTOM;\n        } else {\n            top = ColorPalette.RED_TOP;\n            bottom = ColorPalette.RED_BOTTOM;\n        }\n    }\n}\n","app.game.rpg.ui.components.delegates.RPGRedButtonUI.java",[447,4097,4098,4104,4108,4114,4118,4133,4137,4143,4153,4157,4163,4172,4181,4191,4200,4209,4217,4225,4233,4237,4241],{"__ignoreMap":461},[465,4099,4100,4102],{"class":467,"line":468},[465,4101,472],{"class":471},[465,4103,728],{"class":475},[465,4105,4106],{"class":467,"line":479},[465,4107,483],{"emptyLinePlaceholder":482},[465,4109,4110,4112],{"class":467,"line":486},[465,4111,489],{"class":471},[465,4113,2757],{"class":475},[465,4115,4116],{"class":467,"line":495},[465,4117,483],{"emptyLinePlaceholder":482},[465,4119,4120,4122,4124,4126,4128,4130],{"class":467,"line":500},[465,4121,572],{"class":471},[465,4123,575],{"class":471},[465,4125,2488],{"class":578},[465,4127,582],{"class":471},[465,4129,2653],{"class":578},[465,4131,4132],{"class":475},"{\n",[465,4134,4135],{"class":467,"line":515},[465,4136,483],{"emptyLinePlaceholder":482},[465,4138,4139,4141],{"class":467,"line":527},[465,4140,1036],{"class":475},[465,4142,1039],{"class":471},[465,4144,4145,4147,4149,4151],{"class":467,"line":532},[465,4146,850],{"class":471},[465,4148,1047],{"class":471},[465,4150,3958],{"class":578},[465,4152,1978],{"class":475},[465,4154,4155],{"class":467,"line":539},[465,4156,483],{"emptyLinePlaceholder":482},[465,4158,4159,4161],{"class":467,"line":545},[465,4160,3971],{"class":471},[465,4162,3974],{"class":475},[465,4164,4165,4167,4169],{"class":467,"line":551},[465,4166,3980],{"class":475},[465,4168,958],{"class":471},[465,4170,4171],{"class":475}," ColorPalette.RED_TOP;\n",[465,4173,4174,4176,4178],{"class":467,"line":557},[465,4175,3991],{"class":475},[465,4177,958],{"class":471},[465,4179,4180],{"class":475}," ColorPalette.RED_BOTTOM;\n",[465,4182,4183,4185,4187,4189],{"class":467,"line":563},[465,4184,2059],{"class":475},[465,4186,4004],{"class":471},[465,4188,4007],{"class":471},[465,4190,4010],{"class":475},[465,4192,4193,4195,4197],{"class":467,"line":569},[465,4194,3980],{"class":475},[465,4196,958],{"class":471},[465,4198,4199],{"class":475}," ColorPalette.RED_HOVER_TOP;\n",[465,4201,4202,4204,4206],{"class":467,"line":591},[465,4203,3991],{"class":475},[465,4205,958],{"class":471},[465,4207,4208],{"class":475}," ColorPalette.RED_HOVER_BOTTOM;\n",[465,4210,4211,4213,4215],{"class":467,"line":596},[465,4212,2059],{"class":475},[465,4214,4004],{"class":471},[465,4216,588],{"class":475},[465,4218,4219,4221,4223],{"class":467,"line":602},[465,4220,3980],{"class":475},[465,4222,958],{"class":471},[465,4224,4171],{"class":475},[465,4226,4227,4229,4231],{"class":467,"line":608},[465,4228,3991],{"class":475},[465,4230,958],{"class":471},[465,4232,4180],{"class":475},[465,4234,4235],{"class":467,"line":614},[465,4236,2088],{"class":475},[465,4238,4239],{"class":467,"line":630},[465,4240,693],{"class":475},[465,4242,4243],{"class":467,"line":643},[465,4244,699],{"class":475},[423,4246,2534,4247,4249,4250,4252,4253,4256],{},[447,4248,4088],{}," extiende ",[447,4251,2715],{}," y simplemente sobrescribe el método ",[447,4254,4255],{},"configureColors()"," para usar una paleta de colores roja en lugar de verde. De esta manera, puedes reutilizar la lógica de dibujo y solo cambiar los colores según el tipo de botón que quieras crear.",[418,4258,4260],{"id":4259},"las-etiquetas-personalizadas","Las etiquetas personalizadas",[423,4262,4263],{},"Además de los botones, también podemos crear etiquetas personalizadas para mostrar información importante en nuestra interfaz, como el nombre del personaje, su nivel o su salud. Aquí hay un ejemplo de cómo podríamos implementar una etiqueta personalizada:",[452,4265,4266,4554,4569,4578],{},[455,4267,4270],{"className":457,"code":4268,"filename":4269,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.labels;\n\nimport app.game.rpg.ui.components.borders.RPGRoundedBorder;\nimport app.game.rpg.ui.components.delegates.RPGLabelUI;\nimport app.game.rpg.ui.components.utils.RPGGradientType;\n\nimport javax.swing.*;\nimport javax.swing.border.CompoundBorder;\nimport javax.swing.border.EmptyBorder;\nimport java.awt.*;\n\npublic class RPGLabel extends JLabel {\n\n    private Color backgroundColor;\n\n    public RPGLabel(String text) {\n        super(text);\n        backgroundColor = new Color(104, 0, 255, 255);\n        setUI(new RPGLabelUI());\n    }\n\n    public RPGLabel(String text, RPGGradientType gradientType) {\n        super(text);\n        backgroundColor = new Color(104, 0, 255, 255);\n        setUI(new RPGLabelUI(gradientType));\n    }\n\n    @Override\n    protected void paintComponent(Graphics g) {\n        super.paintComponent(g);\n    }\n}\n","app.game.rpg.ui.components.labels.RPGLabel.java",[447,4271,4272,4279,4283,4289,4296,4302,4306,4316,4322,4328,4338,4342,4357,4361,4368,4372,4384,4390,4419,4432,4436,4440,4458,4464,4492,4505,4509,4513,4519,4534,4546,4550],{"__ignoreMap":461},[465,4273,4274,4276],{"class":467,"line":468},[465,4275,472],{"class":471},[465,4277,4278],{"class":475}," app.game.rpg.ui.components.labels;\n",[465,4280,4281],{"class":467,"line":479},[465,4282,483],{"emptyLinePlaceholder":482},[465,4284,4285,4287],{"class":467,"line":486},[465,4286,489],{"class":471},[465,4288,739],{"class":475},[465,4290,4291,4293],{"class":467,"line":495},[465,4292,489],{"class":471},[465,4294,4295],{"class":475}," app.game.rpg.ui.components.delegates.RPGLabelUI;\n",[465,4297,4298,4300],{"class":467,"line":500},[465,4299,489],{"class":471},[465,4301,1722],{"class":475},[465,4303,4304],{"class":467,"line":515},[465,4305,483],{"emptyLinePlaceholder":482},[465,4307,4308,4310,4312,4314],{"class":467,"line":527},[465,4309,489],{"class":471},[465,4311,505],{"class":475},[465,4313,509],{"class":508},[465,4315,512],{"class":475},[465,4317,4318,4320],{"class":467,"line":532},[465,4319,489],{"class":471},[465,4321,760],{"class":475},[465,4323,4324,4326],{"class":467,"line":539},[465,4325,489],{"class":471},[465,4327,767],{"class":475},[465,4329,4330,4332,4334,4336],{"class":467,"line":545},[465,4331,489],{"class":471},[465,4333,520],{"class":475},[465,4335,509],{"class":508},[465,4337,512],{"class":475},[465,4339,4340],{"class":467,"line":551},[465,4341,483],{"emptyLinePlaceholder":482},[465,4343,4344,4346,4348,4350,4352,4355],{"class":467,"line":557},[465,4345,572],{"class":471},[465,4347,575],{"class":471},[465,4349,2309],{"class":578},[465,4351,582],{"class":471},[465,4353,4354],{"class":578}," JLabel",[465,4356,588],{"class":475},[465,4358,4359],{"class":467,"line":563},[465,4360,483],{"emptyLinePlaceholder":482},[465,4362,4363,4365],{"class":467,"line":569},[465,4364,1818],{"class":471},[465,4366,4367],{"class":475}," Color backgroundColor;\n",[465,4369,4370],{"class":467,"line":591},[465,4371,483],{"emptyLinePlaceholder":482},[465,4373,4374,4376,4378,4380,4382],{"class":467,"line":596},[465,4375,652],{"class":471},[465,4377,2309],{"class":578},[465,4379,1865],{"class":475},[465,4381,2633],{"class":623},[465,4383,669],{"class":475},[465,4385,4386,4388],{"class":467,"line":602},[465,4387,1068],{"class":508},[465,4389,2642],{"class":475},[465,4391,4392,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417],{"class":467,"line":608},[465,4393,4394],{"class":475},"        backgroundColor ",[465,4396,958],{"class":471},[465,4398,1088],{"class":471},[465,4400,1612],{"class":578},[465,4402,678],{"class":475},[465,4404,1885],{"class":508},[465,4406,1099],{"class":475},[465,4408,1102],{"class":508},[465,4410,1099],{"class":475},[465,4412,1894],{"class":508},[465,4414,1099],{"class":475},[465,4416,1894],{"class":508},[465,4418,1105],{"class":475},[465,4420,4421,4423,4425,4427,4430],{"class":467,"line":614},[465,4422,675],{"class":578},[465,4424,678],{"class":475},[465,4426,681],{"class":471},[465,4428,4429],{"class":578}," RPGLabelUI",[465,4431,1353],{"class":475},[465,4433,4434],{"class":467,"line":630},[465,4435,693],{"class":475},[465,4437,4438],{"class":467,"line":643},[465,4439,483],{"emptyLinePlaceholder":482},[465,4441,4442,4444,4446,4448,4450,4453,4456],{"class":467,"line":649},[465,4443,652],{"class":471},[465,4445,2309],{"class":578},[465,4447,1865],{"class":475},[465,4449,2633],{"class":623},[465,4451,4452],{"class":475},", RPGGradientType ",[465,4454,4455],{"class":623},"gradientType",[465,4457,669],{"class":475},[465,4459,4460,4462],{"class":467,"line":672},[465,4461,1068],{"class":508},[465,4463,2642],{"class":475},[465,4465,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4486,4488,4490],{"class":467,"line":690},[465,4467,4394],{"class":475},[465,4469,958],{"class":471},[465,4471,1088],{"class":471},[465,4473,1612],{"class":578},[465,4475,678],{"class":475},[465,4477,1885],{"class":508},[465,4479,1099],{"class":475},[465,4481,1102],{"class":508},[465,4483,1099],{"class":475},[465,4485,1894],{"class":508},[465,4487,1099],{"class":475},[465,4489,1894],{"class":508},[465,4491,1105],{"class":475},[465,4493,4494,4496,4498,4500,4502],{"class":467,"line":696},[465,4495,675],{"class":578},[465,4497,678],{"class":475},[465,4499,681],{"class":471},[465,4501,4429],{"class":578},[465,4503,4504],{"class":475},"(gradientType));\n",[465,4506,4507],{"class":467,"line":872},[465,4508,693],{"class":475},[465,4510,4511],{"class":467,"line":882},[465,4512,483],{"emptyLinePlaceholder":482},[465,4514,4515,4517],{"class":467,"line":887},[465,4516,1036],{"class":475},[465,4518,1039],{"class":471},[465,4520,4521,4523,4525,4528,4530,4532],{"class":467,"line":892},[465,4522,850],{"class":471},[465,4524,1047],{"class":471},[465,4526,4527],{"class":578}," paintComponent",[465,4529,1278],{"class":475},[465,4531,1281],{"class":623},[465,4533,669],{"class":475},[465,4535,4536,4538,4540,4543],{"class":467,"line":898},[465,4537,1068],{"class":508},[465,4539,1071],{"class":475},[465,4541,4542],{"class":578},"paintComponent",[465,4544,4545],{"class":475},"(g);\n",[465,4547,4548],{"class":467,"line":903},[465,4549,693],{"class":475},[465,4551,4552],{"class":467,"line":915},[465,4553,699],{"class":475},[423,4555,2534,4556,2708,4559,2712,4562,4565,4566,4568],{},[447,4557,4558],{},"RPGLabel",[447,4560,4561],{},"JLabel",[447,4563,4564],{},"RPGLabelUI"," para su apariencia. Al igual que con los botones, puedes crear diferentes implementaciones de ",[447,4567,4564],{}," para tener etiquetas con diferentes estilos, como una etiqueta con un fondo degradado o una etiqueta con un borde redondeado.",[423,4570,4571,4572,4574,4575,4577],{},"El delegador ",[447,4573,4564],{}," se encargará de dibujar el fondo y el borde de la etiqueta, mientras que el texto se dibujará automáticamente por la clase ",[447,4576,4561],{}," de la siguiente manera:",[455,4579,4582],{"className":457,"code":4580,"filename":4581,"language":460,"meta":461,"style":461},"package app.game.rpg.ui.components.delegates;\n\nimport app.game.rpg.ui.components.borders.RPGRoundedBorder;\nimport app.game.rpg.ui.components.utils.RPGGradientType;\n\nimport javax.swing.*;\nimport javax.swing.border.CompoundBorder;\nimport javax.swing.border.EmptyBorder;\nimport javax.swing.plaf.basic.BasicLabelUI;\nimport java.awt.*;\nimport java.io.IOException;\nimport java.util.Objects;\n\npublic class RPGLabelUI extends BasicLabelUI {\n\n    public RPGGradientType gradientType = RPGGradientType.LINEAR_VERTICAL;\n\n    public RPGLabelUI() {\n        super();\n    }\n\n    public RPGLabelUI(RPGGradientType gradientType) {\n        super();\n        this.gradientType = gradientType;\n    }\n\n    @Override\n    protected void installDefaults(JLabel c) {\n\n        Font font;\n        try {\n            font = Font.createFont(Font.TRUETYPE_FONT, Objects.requireNonNull(getClass().getResourceAsStream(\"\u002Ffonts\u002FBoldPixels.ttf\"))).deriveFont(Font.PLAIN, 22f);\n        } catch (FontFormatException | IOException e) {\n            throw new RuntimeException(e);\n        }\n        c.setForeground(Color.WHITE);\n        c.setFont(font);\n        c.setHorizontalAlignment(SwingConstants.LEFT);\n        c.setVerticalAlignment(SwingConstants.CENTER);\n        \u002F\u002F 🔥 Aplicamos el borde reutilizable\n        if (gradientType != RPGGradientType.NONE) {\n            c.setBorder(new RPGRoundedBorder(3, 10));\n            c.setBorder(new CompoundBorder(c.getBorder(), new EmptyBorder(5, 10, 5, 10)));\n        }\n    }\n\n    @Override\n    public void paint(Graphics g, JComponent c) {\n        Graphics2D g2d = (Graphics2D) g.create();\n        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\n        if (gradientType != RPGGradientType.NONE) {\n            Paint gradient = switch (gradientType) {\n                case LINEAR_VERTICAL -> getLinearGradient(c.getWidth(), c.getHeight());\n                default -> getLinearGradient(c.getWidth(), c.getHeight());\n            };\n            g2d.setPaint(gradient);\n            g2d.fillRoundRect(0, 0, c.getWidth(), c.getHeight(), 10, 10);\n        }\n        super.paint(g2d, c);\n        g2d.dispose();\n    }\n\n    public Paint getLinearGradient(int width, int height) {\n        return new LinearGradientPaint(0, 0, 0, height,\n                new float[]{0f, 0.5f, 1f},\n                new Color[]{new Color(39, 0, 95, 255), new Color(104, 0, 255, 255), new Color(39, 0, 95, 255)});\n    }\n}\n","app.game.rpg.ui.components.delegates.RPGLabelUI.java",[447,4583,4584,4590,4594,4600,4606,4610,4620,4626,4632,4639,4649,4655,4661,4665,4680,4684,4696,4700,4708,4714,4718,4722,4735,4741,4753,4757,4761,4767,4782,4786,4791,4797,4836,4848,4858,4862,4871,4880,4890,4900,4905,4918,4941,4981,4985,4989,4993,4999,5017,5029,5038,5048,5061,5085,5105,5110,5119,5151,5155,5166,5174,5178,5182,5207,5230,5252,5327,5331],{"__ignoreMap":461},[465,4585,4586,4588],{"class":467,"line":468},[465,4587,472],{"class":471},[465,4589,728],{"class":475},[465,4591,4592],{"class":467,"line":479},[465,4593,483],{"emptyLinePlaceholder":482},[465,4595,4596,4598],{"class":467,"line":486},[465,4597,489],{"class":471},[465,4599,739],{"class":475},[465,4601,4602,4604],{"class":467,"line":495},[465,4603,489],{"class":471},[465,4605,1722],{"class":475},[465,4607,4608],{"class":467,"line":500},[465,4609,483],{"emptyLinePlaceholder":482},[465,4611,4612,4614,4616,4618],{"class":467,"line":515},[465,4613,489],{"class":471},[465,4615,505],{"class":475},[465,4617,509],{"class":508},[465,4619,512],{"class":475},[465,4621,4622,4624],{"class":467,"line":527},[465,4623,489],{"class":471},[465,4625,760],{"class":475},[465,4627,4628,4630],{"class":467,"line":532},[465,4629,489],{"class":471},[465,4631,767],{"class":475},[465,4633,4634,4636],{"class":467,"line":539},[465,4635,489],{"class":471},[465,4637,4638],{"class":475}," javax.swing.plaf.basic.BasicLabelUI;\n",[465,4640,4641,4643,4645,4647],{"class":467,"line":545},[465,4642,489],{"class":471},[465,4644,520],{"class":475},[465,4646,509],{"class":508},[465,4648,512],{"class":475},[465,4650,4651,4653],{"class":467,"line":551},[465,4652,489],{"class":471},[465,4654,1757],{"class":475},[465,4656,4657,4659],{"class":467,"line":557},[465,4658,489],{"class":471},[465,4660,1764],{"class":475},[465,4662,4663],{"class":467,"line":563},[465,4664,483],{"emptyLinePlaceholder":482},[465,4666,4667,4669,4671,4673,4675,4678],{"class":467,"line":569},[465,4668,572],{"class":471},[465,4670,575],{"class":471},[465,4672,4429],{"class":578},[465,4674,582],{"class":471},[465,4676,4677],{"class":578}," BasicLabelUI",[465,4679,588],{"class":475},[465,4681,4682],{"class":467,"line":591},[465,4683,483],{"emptyLinePlaceholder":482},[465,4685,4686,4688,4691,4693],{"class":467,"line":596},[465,4687,652],{"class":471},[465,4689,4690],{"class":475}," RPGGradientType gradientType ",[465,4692,958],{"class":471},[465,4694,4695],{"class":475}," RPGGradientType.LINEAR_VERTICAL;\n",[465,4697,4698],{"class":467,"line":602},[465,4699,483],{"emptyLinePlaceholder":482},[465,4701,4702,4704,4706],{"class":467,"line":608},[465,4703,652],{"class":471},[465,4705,4429],{"class":578},[465,4707,1978],{"class":475},[465,4709,4710,4712],{"class":467,"line":614},[465,4711,1068],{"class":508},[465,4713,1377],{"class":475},[465,4715,4716],{"class":467,"line":630},[465,4717,693],{"class":475},[465,4719,4720],{"class":467,"line":643},[465,4721,483],{"emptyLinePlaceholder":482},[465,4723,4724,4726,4728,4731,4733],{"class":467,"line":649},[465,4725,652],{"class":471},[465,4727,4429],{"class":578},[465,4729,4730],{"class":475},"(RPGGradientType ",[465,4732,4455],{"class":623},[465,4734,669],{"class":475},[465,4736,4737,4739],{"class":467,"line":672},[465,4738,1068],{"class":508},[465,4740,1377],{"class":475},[465,4742,4743,4745,4748,4750],{"class":467,"line":690},[465,4744,952],{"class":508},[465,4746,4747],{"class":475},".gradientType ",[465,4749,958],{"class":471},[465,4751,4752],{"class":475}," gradientType;\n",[465,4754,4755],{"class":467,"line":696},[465,4756,693],{"class":475},[465,4758,4759],{"class":467,"line":872},[465,4760,483],{"emptyLinePlaceholder":482},[465,4762,4763,4765],{"class":467,"line":882},[465,4764,1036],{"class":475},[465,4766,1039],{"class":471},[465,4768,4769,4771,4773,4775,4778,4780],{"class":467,"line":887},[465,4770,850],{"class":471},[465,4772,1047],{"class":471},[465,4774,1050],{"class":578},[465,4776,4777],{"class":475},"(JLabel ",[465,4779,1287],{"class":623},[465,4781,669],{"class":475},[465,4783,4784],{"class":467,"line":892},[465,4785,483],{"emptyLinePlaceholder":482},[465,4787,4788],{"class":467,"line":898},[465,4789,4790],{"class":475},"        Font font;\n",[465,4792,4793,4795],{"class":467,"line":903},[465,4794,1999],{"class":471},[465,4796,588],{"class":475},[465,4798,4799,4801,4803,4805,4807,4810,4812,4814,4816,4818,4821,4823,4825,4828,4830,4832,4834],{"class":467,"line":915},[465,4800,2006],{"class":475},[465,4802,958],{"class":471},[465,4804,2011],{"class":475},[465,4806,2014],{"class":578},[465,4808,4809],{"class":475},"(Font.TRUETYPE_FONT, Objects.",[465,4811,2028],{"class":578},[465,4813,678],{"class":475},[465,4815,2033],{"class":578},[465,4817,2036],{"class":475},[465,4819,4820],{"class":578},"getResourceAsStream",[465,4822,678],{"class":475},[465,4824,2045],{"class":2044},[465,4826,4827],{"class":475},"))).",[465,4829,2116],{"class":578},[465,4831,2119],{"class":475},[465,4833,3086],{"class":508},[465,4835,1105],{"class":475},[465,4837,4838,4840,4842,4844,4846],{"class":467,"line":927},[465,4839,2059],{"class":475},[465,4841,2062],{"class":471},[465,4843,2065],{"class":475},[465,4845,2068],{"class":623},[465,4847,669],{"class":475},[465,4849,4850,4852,4854,4856],{"class":467,"line":932},[465,4851,2075],{"class":471},[465,4853,1088],{"class":471},[465,4855,2080],{"class":578},[465,4857,2083],{"class":475},[465,4859,4860],{"class":467,"line":949},[465,4861,2088],{"class":475},[465,4863,4864,4867,4869],{"class":467,"line":964},[465,4865,4866],{"class":475},"        c.",[465,4868,3039],{"class":578},[465,4870,3042],{"class":475},[465,4872,4873,4875,4877],{"class":467,"line":977},[465,4874,4866],{"class":475},[465,4876,3066],{"class":578},[465,4878,4879],{"class":475},"(font);\n",[465,4881,4882,4884,4887],{"class":467,"line":982},[465,4883,4866],{"class":475},[465,4885,4886],{"class":578},"setHorizontalAlignment",[465,4888,4889],{"class":475},"(SwingConstants.LEFT);\n",[465,4891,4892,4894,4897],{"class":467,"line":987},[465,4893,4866],{"class":475},[465,4895,4896],{"class":578},"setVerticalAlignment",[465,4898,4899],{"class":475},"(SwingConstants.CENTER);\n",[465,4901,4902],{"class":467,"line":992},[465,4903,4904],{"class":535},"        \u002F\u002F 🔥 Aplicamos el borde reutilizable\n",[465,4906,4907,4909,4912,4915],{"class":467,"line":998},[465,4908,3971],{"class":471},[465,4910,4911],{"class":475}," (gradientType ",[465,4913,4914],{"class":471},"!=",[465,4916,4917],{"class":475}," RPGGradientType.NONE) {\n",[465,4919,4920,4923,4925,4927,4929,4931,4933,4935,4937,4939],{"class":467,"line":1004},[465,4921,4922],{"class":475},"            c.",[465,4924,1161],{"class":578},[465,4926,678],{"class":475},[465,4928,681],{"class":471},[465,4930,1091],{"class":578},[465,4932,678],{"class":475},[465,4934,3105],{"class":508},[465,4936,1099],{"class":475},[465,4938,1123],{"class":508},[465,4940,1926],{"class":475},[465,4942,4943,4945,4947,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973,4975,4977,4979],{"class":467,"line":1010},[465,4944,4922],{"class":475},[465,4946,1161],{"class":578},[465,4948,678],{"class":475},[465,4950,681],{"class":471},[465,4952,1168],{"class":578},[465,4954,1480],{"class":475},[465,4956,2105],{"class":578},[465,4958,3128],{"class":475},[465,4960,681],{"class":471},[465,4962,1118],{"class":578},[465,4964,678],{"class":475},[465,4966,1096],{"class":508},[465,4968,1099],{"class":475},[465,4970,1123],{"class":508},[465,4972,1099],{"class":475},[465,4974,1096],{"class":508},[465,4976,1099],{"class":475},[465,4978,1123],{"class":508},[465,4980,3152],{"class":475},[465,4982,4983],{"class":467,"line":1015},[465,4984,2088],{"class":475},[465,4986,4987],{"class":467,"line":1028},[465,4988,693],{"class":475},[465,4990,4991],{"class":467,"line":1033},[465,4992,483],{"emptyLinePlaceholder":482},[465,4994,4995,4997],{"class":467,"line":1042},[465,4996,1036],{"class":475},[465,4998,1039],{"class":471},[465,5000,5001,5003,5005,5007,5009,5011,5013,5015],{"class":467,"line":1060},[465,5002,652],{"class":471},[465,5004,1047],{"class":471},[465,5006,1275],{"class":578},[465,5008,1278],{"class":475},[465,5010,1281],{"class":623},[465,5012,1284],{"class":475},[465,5014,1287],{"class":623},[465,5016,669],{"class":475},[465,5018,5019,5021,5023,5025,5027],{"class":467,"line":1065},[465,5020,1300],{"class":475},[465,5022,958],{"class":471},[465,5024,3533],{"class":475},[465,5026,3536],{"class":578},[465,5028,1377],{"class":475},[465,5030,5031,5033,5035],{"class":467,"line":1080},[465,5032,1311],{"class":475},[465,5034,3555],{"class":578},[465,5036,5037],{"class":475},"(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\n",[465,5039,5040,5042,5044,5046],{"class":467,"line":1108},[465,5041,3971],{"class":471},[465,5043,4911],{"class":475},[465,5045,4914],{"class":471},[465,5047,4917],{"class":475},[465,5049,5050,5053,5055,5058],{"class":467,"line":1140},[465,5051,5052],{"class":475},"            Paint gradient ",[465,5054,958],{"class":471},[465,5056,5057],{"class":471}," switch",[465,5059,5060],{"class":475}," (gradientType) {\n",[465,5062,5063,5066,5069,5072,5075,5077,5079,5081,5083],{"class":467,"line":1156},[465,5064,5065],{"class":471},"                case",[465,5067,5068],{"class":475}," LINEAR_VERTICAL ",[465,5070,5071],{"class":471},"->",[465,5073,5074],{"class":578}," getLinearGradient",[465,5076,1480],{"class":475},[465,5078,1344],{"class":578},[465,5080,1347],{"class":475},[465,5082,1350],{"class":578},[465,5084,1353],{"class":475},[465,5086,5087,5090,5093,5095,5097,5099,5101,5103],{"class":467,"line":1174},[465,5088,5089],{"class":471},"                default",[465,5091,5092],{"class":471}," ->",[465,5094,5074],{"class":578},[465,5096,1480],{"class":475},[465,5098,1344],{"class":578},[465,5100,1347],{"class":475},[465,5102,1350],{"class":578},[465,5104,1353],{"class":475},[465,5106,5107],{"class":467,"line":1192},[465,5108,5109],{"class":475},"            };\n",[465,5111,5112,5115,5117],{"class":467,"line":1197},[465,5113,5114],{"class":475},"            g2d.",[465,5116,1314],{"class":578},[465,5118,3636],{"class":475},[465,5120,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149],{"class":467,"line":1202},[465,5122,5114],{"class":475},[465,5124,3644],{"class":578},[465,5126,678],{"class":475},[465,5128,1102],{"class":508},[465,5130,1099],{"class":475},[465,5132,1102],{"class":508},[465,5134,1341],{"class":475},[465,5136,1344],{"class":578},[465,5138,1347],{"class":475},[465,5140,1350],{"class":578},[465,5142,3128],{"class":475},[465,5144,1123],{"class":508},[465,5146,1099],{"class":475},[465,5148,1123],{"class":508},[465,5150,1105],{"class":475},[465,5152,5153],{"class":467,"line":1207},[465,5154,2088],{"class":475},[465,5156,5157,5159,5161,5163],{"class":467,"line":1213},[465,5158,1068],{"class":508},[465,5160,1071],{"class":475},[465,5162,1363],{"class":578},[465,5164,5165],{"class":475},"(g2d, c);\n",[465,5167,5168,5170,5172],{"class":467,"line":1219},[465,5169,1311],{"class":475},[465,5171,1374],{"class":578},[465,5173,1377],{"class":475},[465,5175,5176],{"class":467,"line":1225},[465,5177,693],{"class":475},[465,5179,5180],{"class":467,"line":1230},[465,5181,483],{"emptyLinePlaceholder":482},[465,5183,5184,5186,5188,5191,5193,5195,5198,5200,5202,5205],{"class":467,"line":1243},[465,5185,652],{"class":471},[465,5187,1444],{"class":475},[465,5189,5190],{"class":578},"getLinearGradient",[465,5192,678],{"class":475},[465,5194,3172],{"class":471},[465,5196,5197],{"class":623}," width",[465,5199,1099],{"class":475},[465,5201,3172],{"class":471},[465,5203,5204],{"class":623}," height",[465,5206,669],{"class":475},[465,5208,5209,5211,5213,5215,5217,5219,5221,5223,5225,5227],{"class":467,"line":1256},[465,5210,1621],{"class":471},[465,5212,1088],{"class":471},[465,5214,3888],{"class":578},[465,5216,678],{"class":475},[465,5218,1102],{"class":508},[465,5220,1099],{"class":475},[465,5222,1102],{"class":508},[465,5224,1099],{"class":475},[465,5226,1102],{"class":508},[465,5228,5229],{"class":475},", height,\n",[465,5231,5232,5234,5236,5238,5240,5242,5245,5247,5249],{"class":467,"line":1261},[465,5233,3913],{"class":471},[465,5235,1576],{"class":471},[465,5237,1579],{"class":475},[465,5239,1582],{"class":508},[465,5241,1099],{"class":475},[465,5243,5244],{"class":508},"0.5f",[465,5246,1099],{"class":475},[465,5248,1587],{"class":508},[465,5250,5251],{"class":475},"},\n",[465,5253,5254,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280,5282,5284,5286,5288,5290,5292,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322,5324],{"class":467,"line":1268},[465,5255,3913],{"class":471},[465,5257,1612],{"class":471},[465,5259,1579],{"class":475},[465,5261,681],{"class":471},[465,5263,1612],{"class":578},[465,5265,678],{"class":475},[465,5267,1910],{"class":508},[465,5269,1099],{"class":475},[465,5271,1102],{"class":508},[465,5273,1099],{"class":475},[465,5275,1919],{"class":508},[465,5277,1099],{"class":475},[465,5279,1894],{"class":508},[465,5281,1901],{"class":475},[465,5283,681],{"class":471},[465,5285,1612],{"class":578},[465,5287,678],{"class":475},[465,5289,1885],{"class":508},[465,5291,1099],{"class":475},[465,5293,1102],{"class":508},[465,5295,1099],{"class":475},[465,5297,1894],{"class":508},[465,5299,1099],{"class":475},[465,5301,1894],{"class":508},[465,5303,1901],{"class":475},[465,5305,681],{"class":471},[465,5307,1612],{"class":578},[465,5309,678],{"class":475},[465,5311,1910],{"class":508},[465,5313,1099],{"class":475},[465,5315,1102],{"class":508},[465,5317,1099],{"class":475},[465,5319,1919],{"class":508},[465,5321,1099],{"class":475},[465,5323,1894],{"class":508},[465,5325,5326],{"class":475},")});\n",[465,5328,5329],{"class":467,"line":1292},[465,5330,693],{"class":475},[465,5332,5333],{"class":467,"line":1297},[465,5334,699],{"class":475},[423,5336,5337,5338,5340,5341,5343,5344,5347,5348,5350],{},"Como podrás notar, ",[447,5339,4564],{}," es un delegador que se encarga de dibujar el fondo y el borde de la etiqueta. Utiliza un degradado para el fondo y un borde redondeado para darle un aspecto más atractivo. El texto se dibuja automáticamente por la clase ",[447,5342,4561],{},", por lo que no necesitamos preocuparnos por eso en el delegador. Sin embargo, podemos usar el enum ",[447,5345,5346],{},"RPGGradientType"," para permitir diferentes tipos de degradados en nuestras etiquetas, lo que nos da aún más flexibilidad para personalizar la apariencia de nuestra interfaz. Esto mediante el proceso de herencia y composición, donde ",[447,5349,4564],{}," puede ser extendido para crear diferentes estilos de etiquetas sin tener que duplicar la lógica de dibujo.",[418,5352,5354],{"id":5353},"conclusión","Conclusión",[423,5356,5357,5358,5360,5361,5363],{},"En esta sección, hemos visto cómo crear componentes personalizados para nuestra interfaz de usuario en un juego RPG utilizando Java Swing. Hemos implementado botones y etiquetas con estilos únicos que se adaptan a la temática de nuestro juego. Al utilizar delegadores como ",[447,5359,2715],{}," y ",[447,5362,4564],{},", podemos separar la lógica de dibujo de la lógica de negocio, lo que nos permite crear componentes reutilizables y fáciles de mantener. Además, al usar una paleta de colores consistente y efectos visuales como degradados y bordes redondeados, podemos darle a nuestra interfaz un aspecto más atractivo y profesional. En la próxima sección, exploraremos cómo organizar estos componentes en paneles y ventanas para construir la interfaz completa de nuestro juego RPG.",[423,5365,5366],{},"En los siguientes apartados, algunos otros elementos como campos de entrada, scroll panes, y el uso de ventanas emergentes (JDialog) para mostrar información adicional o confirmar acciones importantes, como eliminar una partida guardada. También veremos cómo manejar eventos de usuario para que nuestra interfaz sea interactiva y responda a las acciones del jugador de manera efectiva.",[5368,5369,5370],"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 .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}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 .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":461,"searchDepth":479,"depth":479,"links":5372},[5373,5374,5375,5376,5377,5378,5379],{"id":420,"depth":479,"text":421},{"id":434,"depth":479,"text":435},{"id":441,"depth":479,"text":442},{"id":1665,"depth":479,"text":1666},{"id":2555,"depth":479,"text":2556},{"id":4259,"depth":479,"text":4260},{"id":5353,"depth":479,"text":5354},"En esta segunda parte, continuaremos desarrollando la interfaz de usuario para nuestro RPG, enfocándonos en la implementación de Paneles, Botones y otros elementos interactivos.","md",null,{"editButton":42},{"title":293,"description":5380},"VEK0Bd4cbUfI_Zmd6--ileWKwZLDcVHayg_szvJ8_XQ",[5387,5389],{"title":289,"path":290,"stem":291,"description":5388,"children":-1},"En esta sección comenzaremos a diseñar la interfaz gráfica de nuestro RPG utilizando Swing, creando una ventana principal y los componentes básicos para la gestión de personajes.",{"title":297,"path":298,"stem":299,"description":5390,"children":-1},"En este capítulo se explican los Streams de Entrada y Salida en Java, que son fundamentales para manejar la lectura y escritura de datos en archivos y otros medios.",1779479575583]