[{"data":1,"prerenderedAt":752},["ShallowReactive",2],{"navigation_docs":3,"-concurrencia-timer":298,"-concurrencia-timer-surround":747},[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":141,"body":300,"description":740,"extension":741,"links":742,"meta":743,"navigation":744,"path":142,"seo":745,"stem":143,"__hash__":746},"docs\u002F4.concurrencia\u002F09.timer.md",{"type":301,"value":302,"toc":735},"minimark",[303,308,317,321,327,361,365,371,686,731],[304,305,307],"h2",{"id":306},"qué-es-la-clase-timer-en-java-swing","¿Qué es la clase Timer en Java Swing?",[309,310,311,312,316],"p",{},"La clase ",[313,314,315],"code",{},"Timer"," en Java Swing es una herramienta que permite programar tareas para que se ejecuten después de un cierto retraso o de forma periódica. Es especialmente útil para crear interfaces de usuario dinámicas y reactivas, como animaciones, actualizaciones de pantalla o temporizadores.",[304,318,320],{"id":319},"cómo-usar-la-clase-timer","Cómo usar la clase Timer",[309,322,323,324,326],{},"Para utilizar la clase ",[313,325,315],{},", debes seguir estos pasos:",[328,329,330,338,348,354],"ol",{},[331,332,333,334,337],"li",{},"Importar la clase ",[313,335,336],{},"javax.swing.Timer",".",[331,339,340,341,343,344,347],{},"Crear una instancia de ",[313,342,315],{},", especificando el retraso en milisegundos y un ",[313,345,346],{},"ActionListener"," que define la tarea a ejecutar.",[331,349,350,351,337],{},"Iniciar el temporizador con el método ",[313,352,353],{},"start()",[331,355,356,357,360],{},"Detener el temporizador con el método ",[313,358,359],{},"stop()"," si es necesario.",[304,362,364],{"id":363},"ejemplo-de-uso-de-timer","Ejemplo de uso de Timer",[309,366,367,368,370],{},"Supongamos que queremos crear una aplicación que muestre un contador que se actualiza cada segundo. Podemos usar la clase ",[313,369,315],{}," para lograr esto de la siguiente manera:",[372,373,378],"pre",{"className":374,"code":375,"language":376,"meta":377,"style":377},"language-java shiki shiki-themes github-dark","import javax.swing.*;\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\n\npublic class TimerExample {\n    private int count = 0;\n    private JLabel label;\n\n    public TimerExample() {\n        JFrame frame = new JFrame(\"Timer Example\");\n        label = new JLabel(\"Count: \" + count);\n        frame.add(label);\n        frame.setSize(200, 100);\n        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        frame.setVisible(true);\n\n        \u002F\u002F Crear un Timer que se ejecute cada 1000 ms (1 segundo)\n        Timer timer = new Timer(1000, e -> {\n            count++;\n            label.setText(\"Count: \" + count);\n        });\n        timer.start();\n    }\n}\n","java","",[313,379,380,400,408,416,423,439,459,467,472,483,507,531,543,564,575,590,595,602,628,639,656,662,674,680],{"__ignoreMap":377},[381,382,385,389,393,397],"span",{"class":383,"line":384},"line",1,[381,386,388],{"class":387},"snl16","import",[381,390,392],{"class":391},"s95oV"," javax.swing.",[381,394,396],{"class":395},"sDLfK","*",[381,398,399],{"class":391},";\n",[381,401,403,405],{"class":383,"line":402},2,[381,404,388],{"class":387},[381,406,407],{"class":391}," java.awt.event.ActionEvent;\n",[381,409,411,413],{"class":383,"line":410},3,[381,412,388],{"class":387},[381,414,415],{"class":391}," java.awt.event.ActionListener;\n",[381,417,419],{"class":383,"line":418},4,[381,420,422],{"emptyLinePlaceholder":421},true,"\n",[381,424,426,429,432,436],{"class":383,"line":425},5,[381,427,428],{"class":387},"public",[381,430,431],{"class":387}," class",[381,433,435],{"class":434},"svObZ"," TimerExample",[381,437,438],{"class":391}," {\n",[381,440,442,445,448,451,454,457],{"class":383,"line":441},6,[381,443,444],{"class":387},"    private",[381,446,447],{"class":387}," int",[381,449,450],{"class":391}," count ",[381,452,453],{"class":387},"=",[381,455,456],{"class":395}," 0",[381,458,399],{"class":391},[381,460,462,464],{"class":383,"line":461},7,[381,463,444],{"class":387},[381,465,466],{"class":391}," JLabel label;\n",[381,468,470],{"class":383,"line":469},8,[381,471,422],{"emptyLinePlaceholder":421},[381,473,475,478,480],{"class":383,"line":474},9,[381,476,477],{"class":387},"    public",[381,479,435],{"class":434},[381,481,482],{"class":391},"() {\n",[381,484,486,489,491,494,497,500,504],{"class":383,"line":485},10,[381,487,488],{"class":391},"        JFrame frame ",[381,490,453],{"class":387},[381,492,493],{"class":387}," new",[381,495,496],{"class":434}," JFrame",[381,498,499],{"class":391},"(",[381,501,503],{"class":502},"sU2Wk","\"Timer Example\"",[381,505,506],{"class":391},");\n",[381,508,510,513,515,517,520,522,525,528],{"class":383,"line":509},11,[381,511,512],{"class":391},"        label ",[381,514,453],{"class":387},[381,516,493],{"class":387},[381,518,519],{"class":434}," JLabel",[381,521,499],{"class":391},[381,523,524],{"class":502},"\"Count: \"",[381,526,527],{"class":387}," +",[381,529,530],{"class":391}," count);\n",[381,532,534,537,540],{"class":383,"line":533},12,[381,535,536],{"class":391},"        frame.",[381,538,539],{"class":434},"add",[381,541,542],{"class":391},"(label);\n",[381,544,546,548,551,553,556,559,562],{"class":383,"line":545},13,[381,547,536],{"class":391},[381,549,550],{"class":434},"setSize",[381,552,499],{"class":391},[381,554,555],{"class":395},"200",[381,557,558],{"class":391},", ",[381,560,561],{"class":395},"100",[381,563,506],{"class":391},[381,565,567,569,572],{"class":383,"line":566},14,[381,568,536],{"class":391},[381,570,571],{"class":434},"setDefaultCloseOperation",[381,573,574],{"class":391},"(JFrame.EXIT_ON_CLOSE);\n",[381,576,578,580,583,585,588],{"class":383,"line":577},15,[381,579,536],{"class":391},[381,581,582],{"class":434},"setVisible",[381,584,499],{"class":391},[381,586,587],{"class":395},"true",[381,589,506],{"class":391},[381,591,593],{"class":383,"line":592},16,[381,594,422],{"emptyLinePlaceholder":421},[381,596,598],{"class":383,"line":597},17,[381,599,601],{"class":600},"sAwPA","        \u002F\u002F Crear un Timer que se ejecute cada 1000 ms (1 segundo)\n",[381,603,605,608,610,612,615,617,620,623,626],{"class":383,"line":604},18,[381,606,607],{"class":391},"        Timer timer ",[381,609,453],{"class":387},[381,611,493],{"class":387},[381,613,614],{"class":434}," Timer",[381,616,499],{"class":391},[381,618,619],{"class":395},"1000",[381,621,622],{"class":391},", e ",[381,624,625],{"class":387},"->",[381,627,438],{"class":391},[381,629,631,634,637],{"class":383,"line":630},19,[381,632,633],{"class":391},"            count",[381,635,636],{"class":387},"++",[381,638,399],{"class":391},[381,640,642,645,648,650,652,654],{"class":383,"line":641},20,[381,643,644],{"class":391},"            label.",[381,646,647],{"class":434},"setText",[381,649,499],{"class":391},[381,651,524],{"class":502},[381,653,527],{"class":387},[381,655,530],{"class":391},[381,657,659],{"class":383,"line":658},21,[381,660,661],{"class":391},"        });\n",[381,663,665,668,671],{"class":383,"line":664},22,[381,666,667],{"class":391},"        timer.",[381,669,670],{"class":434},"start",[381,672,673],{"class":391},"();\n",[381,675,677],{"class":383,"line":676},23,[381,678,679],{"class":391},"    }\n",[381,681,683],{"class":383,"line":682},24,[381,684,685],{"class":391},"}\n",[372,687,689],{"className":374,"code":688,"language":376,"meta":377,"style":377},"void main(String[] args) {\n    SwingUtilities.invokeLater((Runnable) () -> new TimerExample());\n}\n",[313,690,691,707,727],{"__ignoreMap":377},[381,692,693,696,699,701,704],{"class":383,"line":384},[381,694,695],{"class":387},"void",[381,697,698],{"class":434}," main",[381,700,499],{"class":391},[381,702,703],{"class":387},"String",[381,705,706],{"class":391},"[] args) {\n",[381,708,709,712,715,718,720,722,724],{"class":383,"line":402},[381,710,711],{"class":391},"    SwingUtilities.",[381,713,714],{"class":434},"invokeLater",[381,716,717],{"class":391},"((Runnable) () ",[381,719,625],{"class":387},[381,721,493],{"class":387},[381,723,435],{"class":434},[381,725,726],{"class":391},"());\n",[381,728,729],{"class":383,"line":410},[381,730,685],{"class":391},[732,733,734],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":377,"searchDepth":402,"depth":402,"links":736},[737,738,739],{"id":306,"depth":402,"text":307},{"id":319,"depth":402,"text":320},{"id":363,"depth":402,"text":364},"En este artículo se explicará cómo utilizar la clase Timer en Java Swing para programar tareas que se ejecuten después de un cierto retraso o de forma periódica, lo que es útil para crear interfaces de usuario dinámicas y reactivas.","md",null,{"editButton":104},{"icon":83},{"title":141,"description":740},"73XUwVL1mbo8fHg6cVTCeGBibQek_WIG-fek1zD1Otc",[748,750],{"title":137,"path":138,"stem":139,"description":749,"icon":83,"children":-1},"En este artículo se explicará qué son los semáforos en Java, cómo funcionan y cómo se pueden utilizar para controlar el acceso a recursos compartidos en la programación concurrente.",{"title":145,"path":146,"stem":147,"description":751,"icon":83,"children":-1},"En este artículo se explicarán los algoritmos de ordenamiento de procesos en sistemas operativos, que son técnicas utilizadas para determinar el orden en que los procesos se ejecutan en un sistema operativo, con el objetivo de optimizar el rendimiento y la eficiencia del sistema.",1775101373198]