[{"data":1,"prerenderedAt":1894},["ShallowReactive",2],{"navigation_docs":3,"-gui-text":298,"-gui-text-surround":1889},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":47,"body":300,"description":1882,"extension":1883,"links":1884,"meta":1885,"navigation":1886,"path":48,"seo":1887,"stem":49,"__hash__":1888},"docs\u002F2.gui\u002F07.text.md",{"type":301,"value":302,"toc":1870},"minimark",[303,307,312,315,353,356,365,459,462,495,504,616,622,625,632,698,701,708,813,816,826,881,884,892,985,996,999,1151,1158,1316,1321,1332,1462,1468,1658,1664,1743,1753,1757,1859,1863,1866],[304,305,306],"p",{},"En esta sección, aprenderás a utilizar componentes de texto en interfaces gráficas utilizando la biblioteca Swing de Java. Los componentes de texto son esenciales para interactuar con los usuarios, ya que permiten la entrada y visualización de información.",[308,309,311],"h2",{"id":310},"componentes-de-texto-en-swing","Componentes de texto en Swing",[304,313,314],{},"Swing ofrece varios componentes de texto que puedes utilizar en tus interfaces gráficas:",[316,317,318,326,332,338,347],"ul",{},[319,320,321,325],"li",{},[322,323,324],"code",{},"JLabel",": Se utiliza para mostrar texto estático en la interfaz. No es editable por el usuario.",[319,327,328,331],{},[322,329,330],{},"JTextField",": Permite la entrada de una sola línea de texto. Es útil para formularios y campos de entrada.",[319,333,334,337],{},[322,335,336],{},"JTextArea",": Permite la entrada de múltiples líneas de texto. Es ideal para áreas de comentarios o descripciones largas.",[319,339,340,343,344,346],{},[322,341,342],{},"JPasswordField",": Similar a ",[322,345,330],{},", pero oculta el texto ingresado, lo que es útil para contraseñas.",[319,348,349,352],{},[322,350,351],{},"JFormattedTextField",": Permite la entrada de texto con un formato específico, como fechas o números.",[308,354,324],{"id":355},"jlabel",[304,357,358,359,361,362,364],{},"El componente ",[322,360,324],{}," se utiliza para mostrar texto estático en la interfaz gráfica. Aquí tienes un ejemplo de cómo crear y utilizar un ",[322,363,324],{},":",[366,367,372],"pre",{"className":368,"code":369,"language":370,"meta":371,"style":371},"language-java shiki shiki-themes github-dark","JLabel label = new JLabel(\"Hola, Mundo!\");\nlabel.setFont(new Font(\"Arial\", Font.PLAIN, 16));\nlabel.setForeground(Color.BLUE);\npanel.add(label);\n","java","",[322,373,374,404,436,447],{"__ignoreMap":371},[375,376,379,383,387,390,394,397,401],"span",{"class":377,"line":378},"line",1,[375,380,382],{"class":381},"s95oV","JLabel label ",[375,384,386],{"class":385},"snl16","=",[375,388,389],{"class":385}," new",[375,391,393],{"class":392},"svObZ"," JLabel",[375,395,396],{"class":381},"(",[375,398,400],{"class":399},"sU2Wk","\"Hola, Mundo!\"",[375,402,403],{"class":381},");\n",[375,405,407,410,413,415,418,421,423,426,429,433],{"class":377,"line":406},2,[375,408,409],{"class":381},"label.",[375,411,412],{"class":392},"setFont",[375,414,396],{"class":381},[375,416,417],{"class":385},"new",[375,419,420],{"class":392}," Font",[375,422,396],{"class":381},[375,424,425],{"class":399},"\"Arial\"",[375,427,428],{"class":381},", Font.PLAIN, ",[375,430,432],{"class":431},"sDLfK","16",[375,434,435],{"class":381},"));\n",[375,437,439,441,444],{"class":377,"line":438},3,[375,440,409],{"class":381},[375,442,443],{"class":392},"setForeground",[375,445,446],{"class":381},"(Color.BLUE);\n",[375,448,450,453,456],{"class":377,"line":449},4,[375,451,452],{"class":381},"panel.",[375,454,455],{"class":392},"add",[375,457,458],{"class":381},"(label);\n",[304,460,461],{},"Ahora analicemos cada línea del código:",[463,464,465,474,480,486],"ol",{},[319,466,467,470,471,473],{},[322,468,469],{},"JLabel label = new JLabel(\"Hola, Mundo!\");",": Crea un nuevo objeto ",[322,472,324],{}," con el texto \"Hola, Mundo!\".",[319,475,476,479],{},[322,477,478],{},"label.setFont(new Font(\"Arial\", Font.PLAIN, 16));",": Establece la fuente del texto a Arial, con estilo normal y tamaño 16.",[319,481,482,485],{},[322,483,484],{},"label.setForeground(Color.BLUE);",": Cambia el color del texto a azul.",[319,487,488,491,492,494],{},[322,489,490],{},"panel.add(label);",": Agrega el ",[322,493,324],{}," al panel de la interfaz gráfica.",[304,496,497,498,500,501,503],{},"Así mismo, puedes personalizar otros aspectos del ",[322,499,324],{},", como el fondo, la alineación y el borde. Mediante estos métodos, puedes adaptar el ",[322,502,324],{}," a las necesidades de tu interfaz gráfica.",[505,506,507,520],"table",{},[508,509,510],"thead",{},[511,512,513,517],"tr",{},[514,515,516],"th",{},"Método",[514,518,519],{},"Descripción",[521,522,523,534,544,557,567,579,592,604],"tbody",{},[511,524,525,531],{},[526,527,528],"td",{},[322,529,530],{},"setFont(Font font)",[526,532,533],{},"Establece la fuente del texto.",[511,535,536,541],{},[526,537,538],{},[322,539,540],{},"setForeground(Color c)",[526,542,543],{},"Cambia el color del texto.",[511,545,546,551],{},[526,547,548],{},[322,549,550],{},"setBackground(Color c)",[526,552,553,554,556],{},"Cambia el color de fondo del ",[322,555,324],{},".",[511,558,559,564],{},[526,560,561],{},[322,562,563],{},"setHorizontalAlignment(int alignment)",[526,565,566],{},"Establece la alineación horizontal del texto.",[511,568,569,574],{},[526,570,571],{},[322,572,573],{},"setBorder(Border b)",[526,575,576,577,556],{},"Establece un borde alrededor del ",[322,578,324],{},[511,580,581,586],{},[526,582,583],{},[322,584,585],{},"setOpaque(boolean isOpaque)",[526,587,588,589,591],{},"Define si el fondo del ",[322,590,324],{}," es opaco.",[511,593,594,599],{},[526,595,596],{},[322,597,598],{},"setText(String text)",[526,600,601,602,556],{},"Cambia el texto mostrado en el ",[322,603,324],{},[511,605,606,611],{},[526,607,608],{},[322,609,610],{},"setToolTipText(String text)",[526,612,613,614,556],{},"Establece un texto de ayuda que aparece al pasar el cursor sobre el ",[322,615,324],{},[304,617,618,619,621],{},"Estos métodos te permiten personalizar el componente ",[322,620,324],{}," y el resto de los componentes de texto según tus necesidades.",[308,623,330],{"id":624},"jtextfield",[304,626,358,627,629,630,364],{},[322,628,330],{}," permite la entrada de una sola línea de texto. Aquí tienes un ejemplo de cómo crear y utilizar un ",[322,631,330],{},[366,633,635],{"className":368,"code":634,"language":370,"meta":371,"style":371},"JTextField textField = new JTextField(20);\ntextField.setFont(new Font(\"Arial\", Font.PLAIN, 14));\ntextField.setForeground(Color.BLACK);\npanel.add(textField);\n",[322,636,637,656,680,689],{"__ignoreMap":371},[375,638,639,642,644,646,649,651,654],{"class":377,"line":378},[375,640,641],{"class":381},"JTextField textField ",[375,643,386],{"class":385},[375,645,389],{"class":385},[375,647,648],{"class":392}," JTextField",[375,650,396],{"class":381},[375,652,653],{"class":431},"20",[375,655,403],{"class":381},[375,657,658,661,663,665,667,669,671,673,675,678],{"class":377,"line":406},[375,659,660],{"class":381},"textField.",[375,662,412],{"class":392},[375,664,396],{"class":381},[375,666,417],{"class":385},[375,668,420],{"class":392},[375,670,396],{"class":381},[375,672,425],{"class":399},[375,674,428],{"class":381},[375,676,677],{"class":431},"14",[375,679,435],{"class":381},[375,681,682,684,686],{"class":377,"line":438},[375,683,660],{"class":381},[375,685,443],{"class":392},[375,687,688],{"class":381},"(Color.BLACK);\n",[375,690,691,693,695],{"class":377,"line":449},[375,692,452],{"class":381},[375,694,455],{"class":392},[375,696,697],{"class":381},"(textField);\n",[308,699,336],{"id":700},"jtextarea",[304,702,358,703,705,706,364],{},[322,704,336],{}," permite la entrada de múltiples líneas de texto. Aquí tienes un ejemplo de cómo crear y utilizar un ",[322,707,336],{},[366,709,711],{"className":368,"code":710,"language":370,"meta":371,"style":371},"JTextArea textArea = new JTextArea(5, 20);\ntextArea.setFont(new Font(\"Arial\", Font.PLAIN, 14));\ntextArea.setLineWrap(true);\ntextArea.setWrapStyleWord(true);\nJScrollPane scrollPane = new JScrollPane(textArea);\npanel.add(scrollPane);\n",[322,712,713,737,760,774,787,803],{"__ignoreMap":371},[375,714,715,718,720,722,725,727,730,733,735],{"class":377,"line":378},[375,716,717],{"class":381},"JTextArea textArea ",[375,719,386],{"class":385},[375,721,389],{"class":385},[375,723,724],{"class":392}," JTextArea",[375,726,396],{"class":381},[375,728,729],{"class":431},"5",[375,731,732],{"class":381},", ",[375,734,653],{"class":431},[375,736,403],{"class":381},[375,738,739,742,744,746,748,750,752,754,756,758],{"class":377,"line":406},[375,740,741],{"class":381},"textArea.",[375,743,412],{"class":392},[375,745,396],{"class":381},[375,747,417],{"class":385},[375,749,420],{"class":392},[375,751,396],{"class":381},[375,753,425],{"class":399},[375,755,428],{"class":381},[375,757,677],{"class":431},[375,759,435],{"class":381},[375,761,762,764,767,769,772],{"class":377,"line":438},[375,763,741],{"class":381},[375,765,766],{"class":392},"setLineWrap",[375,768,396],{"class":381},[375,770,771],{"class":431},"true",[375,773,403],{"class":381},[375,775,776,778,781,783,785],{"class":377,"line":449},[375,777,741],{"class":381},[375,779,780],{"class":392},"setWrapStyleWord",[375,782,396],{"class":381},[375,784,771],{"class":431},[375,786,403],{"class":381},[375,788,790,793,795,797,800],{"class":377,"line":789},5,[375,791,792],{"class":381},"JScrollPane scrollPane ",[375,794,386],{"class":385},[375,796,389],{"class":385},[375,798,799],{"class":392}," JScrollPane",[375,801,802],{"class":381},"(textArea);\n",[375,804,806,808,810],{"class":377,"line":805},6,[375,807,452],{"class":381},[375,809,455],{"class":392},[375,811,812],{"class":381},"(scrollPane);\n",[308,814,342],{"id":815},"jpasswordfield",[304,817,358,818,820,821,823,824,364],{},[322,819,342],{}," es similar a ",[322,822,330],{},", pero oculta el texto ingresado, lo que es útil para contraseñas. Aquí tienes un ejemplo de cómo crear y utilizar un ",[322,825,342],{},[366,827,829],{"className":368,"code":828,"language":370,"meta":371,"style":371},"JPasswordField passwordField = new JPasswordField(20);\npasswordField.setFont(new Font(\"Arial\", Font.PLAIN, 14));\npanel.add(passwordField);\n",[322,830,831,849,872],{"__ignoreMap":371},[375,832,833,836,838,840,843,845,847],{"class":377,"line":378},[375,834,835],{"class":381},"JPasswordField passwordField ",[375,837,386],{"class":385},[375,839,389],{"class":385},[375,841,842],{"class":392}," JPasswordField",[375,844,396],{"class":381},[375,846,653],{"class":431},[375,848,403],{"class":381},[375,850,851,854,856,858,860,862,864,866,868,870],{"class":377,"line":406},[375,852,853],{"class":381},"passwordField.",[375,855,412],{"class":392},[375,857,396],{"class":381},[375,859,417],{"class":385},[375,861,420],{"class":392},[375,863,396],{"class":381},[375,865,425],{"class":399},[375,867,428],{"class":381},[375,869,677],{"class":431},[375,871,435],{"class":381},[375,873,874,876,878],{"class":377,"line":438},[375,875,452],{"class":381},[375,877,455],{"class":392},[375,879,880],{"class":381},"(passwordField);\n",[308,882,351],{"id":883},"jformattedtextfield",[304,885,358,886,888,889,891],{},[322,887,351],{}," permite la entrada de texto con un formato específico, como fechas o números. Aquí tienes un ejemplo de cómo crear y utilizar un ",[322,890,351],{}," para ingresar una fecha:",[366,893,895],{"className":368,"code":894,"language":370,"meta":371,"style":371},"import javax.swing.text.MaskFormatter;\nMaskFormatter dateFormatter = new MaskFormatter(\"##\u002F##\u002F####\");\nJFormattedTextField formattedTextField = new JFormattedTextField(dateFormatter);\nformattedTextField.setColumns(10);\nformattedTextField.setFont(new Font(\"Arial\", Font.PLAIN, 14));\npanel.add(formattedTextField);\n",[322,896,897,905,924,939,954,976],{"__ignoreMap":371},[375,898,899,902],{"class":377,"line":378},[375,900,901],{"class":385},"import",[375,903,904],{"class":381}," javax.swing.text.MaskFormatter;\n",[375,906,907,910,912,914,917,919,922],{"class":377,"line":406},[375,908,909],{"class":381},"MaskFormatter dateFormatter ",[375,911,386],{"class":385},[375,913,389],{"class":385},[375,915,916],{"class":392}," MaskFormatter",[375,918,396],{"class":381},[375,920,921],{"class":399},"\"##\u002F##\u002F####\"",[375,923,403],{"class":381},[375,925,926,929,931,933,936],{"class":377,"line":438},[375,927,928],{"class":381},"JFormattedTextField formattedTextField ",[375,930,386],{"class":385},[375,932,389],{"class":385},[375,934,935],{"class":392}," JFormattedTextField",[375,937,938],{"class":381},"(dateFormatter);\n",[375,940,941,944,947,949,952],{"class":377,"line":449},[375,942,943],{"class":381},"formattedTextField.",[375,945,946],{"class":392},"setColumns",[375,948,396],{"class":381},[375,950,951],{"class":431},"10",[375,953,403],{"class":381},[375,955,956,958,960,962,964,966,968,970,972,974],{"class":377,"line":789},[375,957,943],{"class":381},[375,959,412],{"class":392},[375,961,396],{"class":381},[375,963,417],{"class":385},[375,965,420],{"class":392},[375,967,396],{"class":381},[375,969,425],{"class":399},[375,971,428],{"class":381},[375,973,677],{"class":431},[375,975,435],{"class":381},[375,977,978,980,982],{"class":377,"line":805},[375,979,452],{"class":381},[375,981,455],{"class":392},[375,983,984],{"class":381},"(formattedTextField);\n",[304,986,987,988,991,992,995],{},"Sin embargo, ten en cuenta que ",[322,989,990],{},"MaskFormatter"," puede lanzar una excepción ",[322,993,994],{},"ParseException",", por lo que debes manejarla adecuadamente.",[304,997,998],{},"Así mismo, podemos crear un formateador para números:",[366,1000,1002],{"className":368,"code":1001,"language":370,"meta":371,"style":371},"import javax.swing.text.NumberFormatter;\nimport java.text.NumberFormat;\nNumberFormat numberFormat = NumberFormat.getIntegerInstance();\nNumberFormatter numberFormatter = new NumberFormatter(numberFormat);\nnumberFormatter.setValueClass(Integer.class);\nnumberFormatter.setMinimum(0);\nnumberFormatter.setMaximum(100);\nJFormattedTextField numberField = new JFormattedTextField(numberFormatter);\nnumberField.setColumns(10);\nnumberField.setFont(new Font(\"Arial\", Font.PLAIN, 14));\npanel.add(numberField);\n",[322,1003,1004,1011,1018,1034,1049,1060,1074,1089,1104,1118,1141],{"__ignoreMap":371},[375,1005,1006,1008],{"class":377,"line":378},[375,1007,901],{"class":385},[375,1009,1010],{"class":381}," javax.swing.text.NumberFormatter;\n",[375,1012,1013,1015],{"class":377,"line":406},[375,1014,901],{"class":385},[375,1016,1017],{"class":381}," java.text.NumberFormat;\n",[375,1019,1020,1023,1025,1028,1031],{"class":377,"line":438},[375,1021,1022],{"class":381},"NumberFormat numberFormat ",[375,1024,386],{"class":385},[375,1026,1027],{"class":381}," NumberFormat.",[375,1029,1030],{"class":392},"getIntegerInstance",[375,1032,1033],{"class":381},"();\n",[375,1035,1036,1039,1041,1043,1046],{"class":377,"line":449},[375,1037,1038],{"class":381},"NumberFormatter numberFormatter ",[375,1040,386],{"class":385},[375,1042,389],{"class":385},[375,1044,1045],{"class":392}," NumberFormatter",[375,1047,1048],{"class":381},"(numberFormat);\n",[375,1050,1051,1054,1057],{"class":377,"line":789},[375,1052,1053],{"class":381},"numberFormatter.",[375,1055,1056],{"class":392},"setValueClass",[375,1058,1059],{"class":381},"(Integer.class);\n",[375,1061,1062,1064,1067,1069,1072],{"class":377,"line":805},[375,1063,1053],{"class":381},[375,1065,1066],{"class":392},"setMinimum",[375,1068,396],{"class":381},[375,1070,1071],{"class":431},"0",[375,1073,403],{"class":381},[375,1075,1077,1079,1082,1084,1087],{"class":377,"line":1076},7,[375,1078,1053],{"class":381},[375,1080,1081],{"class":392},"setMaximum",[375,1083,396],{"class":381},[375,1085,1086],{"class":431},"100",[375,1088,403],{"class":381},[375,1090,1092,1095,1097,1099,1101],{"class":377,"line":1091},8,[375,1093,1094],{"class":381},"JFormattedTextField numberField ",[375,1096,386],{"class":385},[375,1098,389],{"class":385},[375,1100,935],{"class":392},[375,1102,1103],{"class":381},"(numberFormatter);\n",[375,1105,1107,1110,1112,1114,1116],{"class":377,"line":1106},9,[375,1108,1109],{"class":381},"numberField.",[375,1111,946],{"class":392},[375,1113,396],{"class":381},[375,1115,951],{"class":431},[375,1117,403],{"class":381},[375,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139],{"class":377,"line":1120},10,[375,1122,1109],{"class":381},[375,1124,412],{"class":392},[375,1126,396],{"class":381},[375,1128,417],{"class":385},[375,1130,420],{"class":392},[375,1132,396],{"class":381},[375,1134,425],{"class":399},[375,1136,428],{"class":381},[375,1138,677],{"class":431},[375,1140,435],{"class":381},[375,1142,1144,1146,1148],{"class":377,"line":1143},11,[375,1145,452],{"class":381},[375,1147,455],{"class":392},[375,1149,1150],{"class":381},"(numberField);\n",[304,1152,1153,1154,1157],{},"Oh aún mejor, crear una clase que extienda de ",[322,1155,1156],{},"DefaultFormatter"," para crear un formateador personalizado:",[366,1159,1161],{"className":368,"code":1160,"language":370,"meta":371,"style":371},"import javax.swing.text.DefaultFormatter;\nimport java.text.ParseException;\n\npublic class UpperCaseFormatter extends DefaultFormatter {\n    @Override\n    public Object stringToValue(String text) throws ParseException {\n        if(text != null) {\n            return text.toUpperCase();\n        }else {\n            throw new ParseException(\"Formato inválido\", 0);\n        }\n    }\n}\n",[322,1162,1163,1170,1177,1183,1203,1211,1238,1255,1268,1278,1299,1304,1310],{"__ignoreMap":371},[375,1164,1165,1167],{"class":377,"line":378},[375,1166,901],{"class":385},[375,1168,1169],{"class":381}," javax.swing.text.DefaultFormatter;\n",[375,1171,1172,1174],{"class":377,"line":406},[375,1173,901],{"class":385},[375,1175,1176],{"class":381}," java.text.ParseException;\n",[375,1178,1179],{"class":377,"line":438},[375,1180,1182],{"emptyLinePlaceholder":1181},true,"\n",[375,1184,1185,1188,1191,1194,1197,1200],{"class":377,"line":449},[375,1186,1187],{"class":385},"public",[375,1189,1190],{"class":385}," class",[375,1192,1193],{"class":392}," UpperCaseFormatter",[375,1195,1196],{"class":385}," extends",[375,1198,1199],{"class":392}," DefaultFormatter",[375,1201,1202],{"class":381}," {\n",[375,1204,1205,1208],{"class":377,"line":789},[375,1206,1207],{"class":381},"    @",[375,1209,1210],{"class":385},"Override\n",[375,1212,1213,1216,1219,1222,1225,1229,1232,1235],{"class":377,"line":805},[375,1214,1215],{"class":385},"    public",[375,1217,1218],{"class":381}," Object ",[375,1220,1221],{"class":392},"stringToValue",[375,1223,1224],{"class":381},"(String ",[375,1226,1228],{"class":1227},"s9osk","text",[375,1230,1231],{"class":381},") ",[375,1233,1234],{"class":385},"throws",[375,1236,1237],{"class":381}," ParseException {\n",[375,1239,1240,1243,1246,1249,1252],{"class":377,"line":1076},[375,1241,1242],{"class":385},"        if",[375,1244,1245],{"class":381},"(text ",[375,1247,1248],{"class":385},"!=",[375,1250,1251],{"class":431}," null",[375,1253,1254],{"class":381},") {\n",[375,1256,1257,1260,1263,1266],{"class":377,"line":1091},[375,1258,1259],{"class":385},"            return",[375,1261,1262],{"class":381}," text.",[375,1264,1265],{"class":392},"toUpperCase",[375,1267,1033],{"class":381},[375,1269,1270,1273,1276],{"class":377,"line":1106},[375,1271,1272],{"class":381},"        }",[375,1274,1275],{"class":385},"else",[375,1277,1202],{"class":381},[375,1279,1280,1283,1285,1288,1290,1293,1295,1297],{"class":377,"line":1120},[375,1281,1282],{"class":385},"            throw",[375,1284,389],{"class":385},[375,1286,1287],{"class":392}," ParseException",[375,1289,396],{"class":381},[375,1291,1292],{"class":399},"\"Formato inválido\"",[375,1294,732],{"class":381},[375,1296,1071],{"class":431},[375,1298,403],{"class":381},[375,1300,1301],{"class":377,"line":1143},[375,1302,1303],{"class":381},"        }\n",[375,1305,1307],{"class":377,"line":1306},12,[375,1308,1309],{"class":381},"    }\n",[375,1311,1313],{"class":377,"line":1312},13,[375,1314,1315],{"class":381},"}\n",[1317,1318,1320],"h3",{"id":1319},"las-expresiones-regulares","Las expresiones regulares",[304,1322,1323,1324,1326,1327,1329,1330,364],{},"Una expresión regular (regex) es una secuencia de caracteres que forma un patrón de búsqueda. En Java, las expresiones regulares se utilizan para buscar y manipular cadenas de texto. Puedes utilizar expresiones regulares para validar la entrada del usuario en componentes de texto como ",[322,1325,330],{}," o ",[322,1328,351],{},". Aquí tienes un ejemplo de cómo utilizar una expresión regular para validar una dirección de correo electrónico en un ",[322,1331,330],{},[366,1333,1335],{"className":368,"code":1334,"language":370,"meta":371,"style":371},"JTextField emailField = new JTextField(20);\nemailField.setInputVerifier(new InputVerifier() {\n    @Override\n    public boolean verify(JComponent input) {\n        String emailPattern = \"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,6}$\";\n        String email = ((JTextField) input).getText();\n        return email.matches(emailPattern);\n    }\n});\npanel.add(emailField);\n",[322,1336,1337,1354,1372,1378,1396,1415,1430,1444,1448,1453],{"__ignoreMap":371},[375,1338,1339,1342,1344,1346,1348,1350,1352],{"class":377,"line":378},[375,1340,1341],{"class":381},"JTextField emailField ",[375,1343,386],{"class":385},[375,1345,389],{"class":385},[375,1347,648],{"class":392},[375,1349,396],{"class":381},[375,1351,653],{"class":431},[375,1353,403],{"class":381},[375,1355,1356,1359,1362,1364,1366,1369],{"class":377,"line":406},[375,1357,1358],{"class":381},"emailField.",[375,1360,1361],{"class":392},"setInputVerifier",[375,1363,396],{"class":381},[375,1365,417],{"class":385},[375,1367,1368],{"class":392}," InputVerifier",[375,1370,1371],{"class":381},"() {\n",[375,1373,1374,1376],{"class":377,"line":438},[375,1375,1207],{"class":381},[375,1377,1210],{"class":385},[375,1379,1380,1382,1385,1388,1391,1394],{"class":377,"line":449},[375,1381,1215],{"class":385},[375,1383,1384],{"class":385}," boolean",[375,1386,1387],{"class":392}," verify",[375,1389,1390],{"class":381},"(JComponent ",[375,1392,1393],{"class":1227},"input",[375,1395,1254],{"class":381},[375,1397,1398,1401,1403,1406,1409,1412],{"class":377,"line":789},[375,1399,1400],{"class":381},"        String emailPattern ",[375,1402,386],{"class":385},[375,1404,1405],{"class":399}," \"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+",[375,1407,1408],{"class":431},"\\\\",[375,1410,1411],{"class":399},".[a-zA-Z]{2,6}$\"",[375,1413,1414],{"class":381},";\n",[375,1416,1417,1420,1422,1425,1428],{"class":377,"line":805},[375,1418,1419],{"class":381},"        String email ",[375,1421,386],{"class":385},[375,1423,1424],{"class":381}," ((JTextField) input).",[375,1426,1427],{"class":392},"getText",[375,1429,1033],{"class":381},[375,1431,1432,1435,1438,1441],{"class":377,"line":1076},[375,1433,1434],{"class":385},"        return",[375,1436,1437],{"class":381}," email.",[375,1439,1440],{"class":392},"matches",[375,1442,1443],{"class":381},"(emailPattern);\n",[375,1445,1446],{"class":377,"line":1091},[375,1447,1309],{"class":381},[375,1449,1450],{"class":377,"line":1106},[375,1451,1452],{"class":381},"});\n",[375,1454,1455,1457,1459],{"class":377,"line":1120},[375,1456,452],{"class":381},[375,1458,455],{"class":392},[375,1460,1461],{"class":381},"(emailField);\n",[304,1463,1464,1465,1467],{},"Por otro lado, una forma avanzada de validar la entrada de texto en un ",[322,1466,351],{}," es utilizando expresiones regulares. Puedes crear un formateador personalizado que utilice una expresión regular para validar el texto ingresado. Aquí tienes un ejemplo:",[366,1469,1471],{"className":368,"code":1470,"language":370,"meta":371,"style":371},"import javax.swing.text.DefaultFormatter;\nimport java.text.ParseException;\nimport java.util.regex.Pattern;\n\npublic class RegexFormatter extends DefaultFormatter {\n    private Pattern pattern;\n\n    public RegexFormatter(String regex) {\n        this.pattern = Pattern.compile(regex);\n    }\n\n    @Override\n    public Object stringToValue(String text) throws ParseException {\n        if(pattern.matcher(text).matches()) {\n            return text;\n        } else {\n            throw new ParseException(\"Formato inválido\", 0);\n        }\n    }\n}\n",[322,1472,1473,1479,1485,1492,1496,1511,1519,1523,1536,1555,1559,1563,1569,1587,1606,1614,1624,1643,1648,1653],{"__ignoreMap":371},[375,1474,1475,1477],{"class":377,"line":378},[375,1476,901],{"class":385},[375,1478,1169],{"class":381},[375,1480,1481,1483],{"class":377,"line":406},[375,1482,901],{"class":385},[375,1484,1176],{"class":381},[375,1486,1487,1489],{"class":377,"line":438},[375,1488,901],{"class":385},[375,1490,1491],{"class":381}," java.util.regex.Pattern;\n",[375,1493,1494],{"class":377,"line":449},[375,1495,1182],{"emptyLinePlaceholder":1181},[375,1497,1498,1500,1502,1505,1507,1509],{"class":377,"line":789},[375,1499,1187],{"class":385},[375,1501,1190],{"class":385},[375,1503,1504],{"class":392}," RegexFormatter",[375,1506,1196],{"class":385},[375,1508,1199],{"class":392},[375,1510,1202],{"class":381},[375,1512,1513,1516],{"class":377,"line":805},[375,1514,1515],{"class":385},"    private",[375,1517,1518],{"class":381}," Pattern pattern;\n",[375,1520,1521],{"class":377,"line":1076},[375,1522,1182],{"emptyLinePlaceholder":1181},[375,1524,1525,1527,1529,1531,1534],{"class":377,"line":1091},[375,1526,1215],{"class":385},[375,1528,1504],{"class":392},[375,1530,1224],{"class":381},[375,1532,1533],{"class":1227},"regex",[375,1535,1254],{"class":381},[375,1537,1538,1541,1544,1546,1549,1552],{"class":377,"line":1106},[375,1539,1540],{"class":431},"        this",[375,1542,1543],{"class":381},".pattern ",[375,1545,386],{"class":385},[375,1547,1548],{"class":381}," Pattern.",[375,1550,1551],{"class":392},"compile",[375,1553,1554],{"class":381},"(regex);\n",[375,1556,1557],{"class":377,"line":1120},[375,1558,1309],{"class":381},[375,1560,1561],{"class":377,"line":1143},[375,1562,1182],{"emptyLinePlaceholder":1181},[375,1564,1565,1567],{"class":377,"line":1306},[375,1566,1207],{"class":381},[375,1568,1210],{"class":385},[375,1570,1571,1573,1575,1577,1579,1581,1583,1585],{"class":377,"line":1312},[375,1572,1215],{"class":385},[375,1574,1218],{"class":381},[375,1576,1221],{"class":392},[375,1578,1224],{"class":381},[375,1580,1228],{"class":1227},[375,1582,1231],{"class":381},[375,1584,1234],{"class":385},[375,1586,1237],{"class":381},[375,1588,1590,1592,1595,1598,1601,1603],{"class":377,"line":1589},14,[375,1591,1242],{"class":385},[375,1593,1594],{"class":381},"(pattern.",[375,1596,1597],{"class":392},"matcher",[375,1599,1600],{"class":381},"(text).",[375,1602,1440],{"class":392},[375,1604,1605],{"class":381},"()) {\n",[375,1607,1609,1611],{"class":377,"line":1608},15,[375,1610,1259],{"class":385},[375,1612,1613],{"class":381}," text;\n",[375,1615,1617,1620,1622],{"class":377,"line":1616},16,[375,1618,1619],{"class":381},"        } ",[375,1621,1275],{"class":385},[375,1623,1202],{"class":381},[375,1625,1627,1629,1631,1633,1635,1637,1639,1641],{"class":377,"line":1626},17,[375,1628,1282],{"class":385},[375,1630,389],{"class":385},[375,1632,1287],{"class":392},[375,1634,396],{"class":381},[375,1636,1292],{"class":399},[375,1638,732],{"class":381},[375,1640,1071],{"class":431},[375,1642,403],{"class":381},[375,1644,1646],{"class":377,"line":1645},18,[375,1647,1303],{"class":381},[375,1649,1651],{"class":377,"line":1650},19,[375,1652,1309],{"class":381},[375,1654,1656],{"class":377,"line":1655},20,[375,1657,1315],{"class":381},[304,1659,1660,1661,1663],{},"Luego, puedes utilizar este formateador en un ",[322,1662,351],{}," de la siguiente manera:",[366,1665,1667],{"className":368,"code":1666,"language":370,"meta":371,"style":371},"RegexFormatter emailFormatter = new RegexFormatter(\"^[A-Za-z0-9+_.-]+@(.+)$\");\nJFormattedTextField emailField = new JFormattedTextField(emailFormatter);\nemailField.setColumns(20);\nemailField.setFont(new Font(\"Arial\", Font.PLAIN, 14));\npanel.add(emailField);\n",[322,1668,1669,1687,1701,1713,1735],{"__ignoreMap":371},[375,1670,1671,1674,1676,1678,1680,1682,1685],{"class":377,"line":378},[375,1672,1673],{"class":381},"RegexFormatter emailFormatter ",[375,1675,386],{"class":385},[375,1677,389],{"class":385},[375,1679,1504],{"class":392},[375,1681,396],{"class":381},[375,1683,1684],{"class":399},"\"^[A-Za-z0-9+_.-]+@(.+)$\"",[375,1686,403],{"class":381},[375,1688,1689,1692,1694,1696,1698],{"class":377,"line":406},[375,1690,1691],{"class":381},"JFormattedTextField emailField ",[375,1693,386],{"class":385},[375,1695,389],{"class":385},[375,1697,935],{"class":392},[375,1699,1700],{"class":381},"(emailFormatter);\n",[375,1702,1703,1705,1707,1709,1711],{"class":377,"line":438},[375,1704,1358],{"class":381},[375,1706,946],{"class":392},[375,1708,396],{"class":381},[375,1710,653],{"class":431},[375,1712,403],{"class":381},[375,1714,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733],{"class":377,"line":449},[375,1716,1358],{"class":381},[375,1718,412],{"class":392},[375,1720,396],{"class":381},[375,1722,417],{"class":385},[375,1724,420],{"class":392},[375,1726,396],{"class":381},[375,1728,425],{"class":399},[375,1730,428],{"class":381},[375,1732,677],{"class":431},[375,1734,435],{"class":381},[375,1736,1737,1739,1741],{"class":377,"line":789},[375,1738,452],{"class":381},[375,1740,455],{"class":392},[375,1742,1461],{"class":381},[304,1744,1745,1746,556],{},"Aquí puedes consultar más sobre las expresiones regulares en Java: ",[1747,1748,1752],"a",{"href":1749,"rel":1750},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fjava\u002Fjavase\u002F11\u002Fdocs\u002Fapi\u002Fjava.base\u002Fjava\u002Futil\u002Fregex\u002Fpackage-summary.html",[1751],"nofollow","Documentación de Java sobre Expresiones Regulares",[1317,1754,1756],{"id":1755},"tablas-de-expresiones-regulares-comunes","Tablas de expresiones regulares comunes",[505,1758,1759,1768],{},[508,1760,1761],{},[511,1762,1763,1766],{},[514,1764,1765],{},"Expresión Regular",[514,1767,519],{},[521,1769,1770,1780,1790,1800,1810,1820,1829,1839,1849],{},[511,1771,1772,1777],{},[526,1773,1774],{},[322,1775,1776],{},"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$",[526,1778,1779],{},"Valida una dirección de correo electrónico.",[511,1781,1782,1787],{},[526,1783,1784],{},[322,1785,1786],{},"^\\d{3}-\\d{2}-\\d{4}$",[526,1788,1789],{},"Valida un número de seguro social (SSN) en formato XXX-XX-XXXX.",[511,1791,1792,1797],{},[526,1793,1794],{},[322,1795,1796],{},"^\\d{10}$",[526,1798,1799],{},"Valida un número de teléfono de 10 dígitos.",[511,1801,1802,1807],{},[526,1803,1804],{},[322,1805,1806],{},"^\\d{5}(-\\d{4})?$",[526,1808,1809],{},"Valida un código postal de 5 dígitos o 9 dígitos (ZIP+4).",[511,1811,1812,1817],{},[526,1813,1814],{},[322,1815,1816],{},"^\\d{4}-\\d{2}-\\d{2}$",[526,1818,1819],{},"Valida una fecha en formato AAAA-MM-DD.",[511,1821,1822,1827],{},[526,1823,1824],{},[322,1825,1826],{},"\\d{10}$",[526,1828,1799],{},[511,1830,1831,1836],{},[526,1832,1833],{},[322,1834,1835],{},"^[A-Za-záéíóúÁÉÍÓÚñÑ]+$",[526,1837,1838],{},"Valida solo letras (incluye acentos y ñ).",[511,1840,1841,1846],{},[526,1842,1843],{},[322,1844,1845],{},"^\\d+$",[526,1847,1848],{},"Valida solo números enteros positivos.",[511,1850,1851,1856],{},[526,1852,1853],{},[322,1854,1855],{},"^\\d+(\\.\\d{1,2})?$",[526,1857,1858],{},"Valida números decimales con hasta dos dígitos después del punto.",[308,1860,1862],{"id":1861},"conclusión","Conclusión",[304,1864,1865],{},"Con estos componentes de texto y sus respectivas personalizaciones, podrás crear interfaces gráficas interactivas y funcionales utilizando Swing en Java. Experimenta con diferentes configuraciones y estilos para adaptarlos a las necesidades de tu aplicación.",[1867,1868,1869],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":371,"searchDepth":406,"depth":406,"links":1871},[1872,1873,1874,1875,1876,1877,1881],{"id":310,"depth":406,"text":311},{"id":355,"depth":406,"text":324},{"id":624,"depth":406,"text":330},{"id":700,"depth":406,"text":336},{"id":815,"depth":406,"text":342},{"id":883,"depth":406,"text":351,"children":1878},[1879,1880],{"id":1319,"depth":438,"text":1320},{"id":1755,"depth":438,"text":1756},{"id":1861,"depth":406,"text":1862},"Aprende a utilizar componentes de texto en interfaces gráficas utilizando la biblioteca Swing de Java.","md",null,{"editButton":104},{"icon":25},{"title":47,"description":1882},"cLFA8g6ztx3HavWwzwR-lbYQoQF7-9zL1OHpWxNuSYI",[1890,1892],{"title":43,"path":44,"stem":45,"description":1891,"children":-1},"Aprende a usar el componente JButton en Java Swing para crear botones interactivos en aplicaciones gráficas.",{"title":51,"path":52,"stem":53,"description":1893,"children":-1},"Aprende sobre los diferentes elementos visuales que puedes utilizar en tus proyectos de desarrollo de interfaces gráficas.",1775101370067]