{"id":307,"date":"2026-10-08T19:16:52","date_gmt":"2026-10-08T19:16:52","guid":{"rendered":"https:\/\/java.nosoyia.es\/?page_id=307"},"modified":"2026-10-14T15:32:59","modified_gmt":"2026-10-14T15:32:59","slug":"jframe","status":"publish","type":"page","link":"https:\/\/java.nosoyia.es\/?page_id=307","title":{"rendered":"JFrame"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-3a88641f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-background wp-block-paragraph\" style=\"background-color:#a1f6ed;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">Correspondencia en Python &#8212;&gt;<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/python.nosoyia.es\/ventanas\/\"><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"56\" src=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/06\/Flor.jpg\" alt=\"\" class=\"wp-image-44\" title=\"Bloques en Python\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">La informaci\u00f3n se presenta al usuario a trav\u00e9s de marcos o ventanas. La clase JFrame, nos permite crear el marco o ventana principal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toda ventana va a contener componentes, que se encargar\u00e1n de mostrar informaci\u00f3n, solicitar informaci\u00f3n, o provocar eventos que desencadenar\u00e1n ejecuci\u00f3n de m\u00e9todos o funciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos un ejemplo de JFrame (ventana) donde hemos a\u00f1adido una JLabel con sus respectivos atributos (etiqueta).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar hemos creado una clase personalizada para nuestro c\u00f3digo que heredar\u00e1 de JFrame. Todos los objetos que creemos de tipo MiVentana ser\u00e1n un JFrame con las caracter\u00edsticas que indicamos para nuestra ventana particular. <\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import javax.swing.*;\nimport java.awt.*;\nimport java.awt.event.WindowAdapter;\nimport java.awt.event.WindowEvent;\n\npublic class MiVentana extends JFrame  {\n\n    public MiVentana() {\n        setTitle(&quot;Mi ventana&quot;);\n        setSize(500, 300);\n        setResizable(false);\n        setLayout(null);\n        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);\n        getContentPane().setBackground(new Color(200,250,55));\n\n        addWindowListener(new WindowAdapter() {\n            @Override\n            public void windowClosing(WindowEvent e) {\n\n                int respuesta = JOptionPane.showConfirmDialog(\n                        MiVentana.this,\n                        &quot;\u00bfDesea cerrar la ventana?&quot;,\n                        &quot;Confirmar cierre&quot;,\n                        JOptionPane.YES_NO_OPTION\n                );\n\n                if (respuesta == JOptionPane.YES_OPTION) {\n                    dispose();\n                }\n            }\n        });\n\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A nuestra ventana, le hemos dotado de los siguientes atributos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setTitle(\u00abMi ventana\u00bb)<\/mark><\/em><\/strong> En primer lugar le hemos dado un t\u00edtulo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setSize(500, 300)<\/mark><\/em><\/strong> Despu\u00e9s le hemos dado un tama\u00f1o en p\u00edxeles de ancho por alto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setResizable(false)<\/mark><\/em><\/strong> A continuaci\u00f3n hemos decidido que el usuario no va a poder redimensionar la ventana. Por defecto este valor es true y el usuario puede modificar el tama\u00f1o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setLayout(null)<\/mark><\/em><\/strong> Tambi\u00e9n indicamos que el sistema de posicionamiento de sus componentes va a ser el de coordenadas   (x, y, ancho, alto).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE)<\/mark><\/em><\/strong> Hemos establecido que cuando se pulse el aspa (X) de la ventana, esta no se cierre autom\u00e1ticamente. Esto obligar\u00e1 a indicar un WindowListener que se encargar\u00e1 de indicar al programa qu\u00e9 debe de hacer cuando el aspa sea pulsado. En este caso hemos querido que aparezca un JOptionPane que interrogue al usario sobre si realmente quiere cerrar la ventana. En este caso, si se selecciona \u00abyes\u00bb la ventana se destruye (mediante el m\u00e9todo <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">dispose ( )<\/mark><\/em><\/strong> ). Si es la ventana \u00faltima ventana activa (en este c\u00f3digo es la \u00fanica), finaliza la ejecuci\u00f3n del programa. Otros valores que puede tener <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setDefaultCloseOperation <\/mark><\/em><\/strong> son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>JFrame.HIDE_ON_CLOSE<\/code><\/strong> . Es el valor por defecto. Oculta la ventana pero el programa sigue activo hasta finalizarlo de alguna otra forma.<\/li>\n\n\n\n<li><strong>JFrame.DISPOSE_ON_CLOSE<\/strong>. El efecto es el mismo que el m\u00e9todo dispose ( ) indicado anteriormente.<\/li>\n\n\n\n<li><strong>JFrame.EXIT_ON_CLOSE<\/strong> Destruye la ventana y el programa finaliza, aunque existan otras ventanas activas.<\/li>\n\n\n\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">getContentPane().setBackground(new Color(200,250,55))<\/mark><\/em><\/strong> Con este m\u00e9todo le damos un color de fondo a la ventana. Este color de fondo viene determinado por el c\u00f3digo RGB que indicamos entre par\u00e9ntesis. Tambi\u00e9n podemos darlo un color de fondo directamente nombrando un color, por ejemplo:<br>getContentPane().setBackground(Color.BLUE);<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n hemos creado la clase principal que contiene el main y desde la cual hemos llamado a la ventana:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import javax.swing.*;\nimport java.awt.*;\n\npublic class Pruebas {\n    public static void main(String[] args) {\n        MiVentana ventana_nueva=new MiVentana();\n        ventana_nueva.setVisible(true);\n        JLabel etiqueta = new JLabel(&quot;Soy una etiqueta.&quot;);\n        etiqueta.setFont(new Font(&quot;Arial&quot;, Font.BOLD, 24));\n        etiqueta.setBackground(Color.RED);\n        etiqueta.setForeground(new Color(191,246,225));\n        etiqueta.setOpaque(true);\n        etiqueta.setBounds(45, 82, 320, 60);\n        ventana_nueva.add(etiqueta);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">MiVentana ventana_nueva=new MiVentana();<\/mark><\/em><\/strong> En primer lugar creamos una instancia de nuestra clase propia ventana.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">ventana_nueva.setVisible(true);<\/mark><\/em><\/strong> Le damos el atributo de visible. Por defecto este atributo est\u00e1 en false.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n creamos el componente JLabel (etiqueta), le damos atributos a esta etiqueta y la a\u00f1adimos con el m\u00e9todo .add<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">ventana_nueva.add(etiqueta);<\/mark><\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"492\" height=\"288\" src=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261014_162827.png\" alt=\"\" class=\"wp-image-318\" style=\"width:357px;height:auto\" srcset=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261014_162827.png 492w, https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261014_162827-300x176.png 300w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de pulsar el aspa aparecer\u00e1:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"257\" height=\"122\" src=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261014_162914-1.png\" alt=\"\" class=\"wp-image-319\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-table tabla-colores has-large-font-size\"><table class=\"has-fixed-layout\"><tbody><tr><td><a href=\"https:\/\/java.nosoyia.es\/\">Inicio<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=52\">Comandos Java<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=30\" data-type=\"link\" data-id=\"https:\/\/java.nosoyia.es\/?page_id=30\">Bloques de c\u00f3digo.<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=34\" data-type=\"link\" data-id=\"https:\/\/java.nosoyia.es\/?page_id=34\">Comentar c\u00f3digo<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=18\" data-type=\"link\" data-id=\"https:\/\/java.nosoyia.es\/?page_id=18\">System.out.print<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=71\" data-type=\"page\" data-id=\"71\">Scanner (System.in)<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=81\">Captura de errores<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=91\">String<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=114\">Datos  Num\u00e9ricos<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=124\">Elementos aleatorios<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=136\">Datos Fecha\/hora<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=150\">Constantes<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=157\">Bucles for<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=167\">Bucles while<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=177\">Bloque if<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=190\">Arrays<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=199\">ArrayList<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=227\">switch case<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=236\">HashSet<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=250\">HashMap<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=261\">M\u00e9todos.<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=270\">Clases<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=280\">Archivos<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=299\" data-type=\"page\" data-id=\"270\">Entorno gr\u00e1fico Swing<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=307\">JFrame (Ventanas)<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=321\">Componentes b\u00e1sicos.<\/a><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Correspondencia en Python &#8212;&gt; La informaci\u00f3n se presenta al usuario a trav\u00e9s de marcos o ventanas. La clase JFrame, nos permite crear el marco o ventana principal. Toda ventana va a contener componentes, que se encargar\u00e1n de mostrar informaci\u00f3n, solicitar informaci\u00f3n, o provocar eventos que desencadenar\u00e1n ejecuci\u00f3n de m\u00e9todos o funciones. Veamos un ejemplo de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-307","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=307"}],"version-history":[{"count":5,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/307\/revisions"}],"predecessor-version":[{"id":320,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/307\/revisions\/320"}],"wp:attachment":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}