{"id":321,"date":"2026-10-18T15:47:54","date_gmt":"2026-10-18T15:47:54","guid":{"rendered":"https:\/\/java.nosoyia.es\/?page_id=321"},"modified":"2026-10-18T15:52:36","modified_gmt":"2026-10-18T15:52:36","slug":"componentes-basicos","status":"publish","type":"page","link":"https:\/\/java.nosoyia.es\/?page_id=321","title":{"rendered":"Componentes b\u00e1sicos."},"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\/widgets-basicos\/\"><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\">Dos de los componentes que m\u00e1s se van a utilizar en un entorno gr\u00e1fico de Java son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">JLabel:<\/mark><\/em><\/strong> Contiene texto configurado por la propia aplicaci\u00f3n. Ser\u00eda el equivalente al System.out.print para la consola.<\/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\">JTextField:<\/mark><\/em><\/strong> El usuario puede introducir texto en estos componentes que despu\u00e9s ser\u00e1n usados por la aplicaci\u00f3n. Es el equivalente a la clase Scanner de consola.<\/li>\n\n\n\n<li>Asociados a ambos, puede ir un componente tipo <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">JButton<\/mark><\/em><\/strong> que ser\u00e1 el que desencadene el evento que d\u00e9 lugar a que el programa realice su trabajo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Debemos de tener en cuenta que cualquier componente debe de situarse en la ventana utilizando alguno de los tres sistemas de posicionamiento. Cada uno de ellos tiene unas ventajas y unos inconvenientes, por lo que tendremos que valorar cu\u00e1l de ellos ser\u00e1 el que mejor se adapte a nuestro programa y a sus ventanas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos un ejemplo de c\u00f3digo donde se muestran estos tres componentes. Se trata de un programa que nos solicita un n\u00famero entero (menor de 18 d\u00edgitos) y va a descomponer dicho n\u00famero en sus factores primos. El primer archivo va a contener los componentes y su configuraci\u00f3n:<\/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.util.ArrayList;\n\npublic class Pruebas {\n    public static void main(String[] args) {\n\n        MiVentana ventana_nueva=new MiVentana();\n        ventana_nueva.setVisible(true);\n\n        JLabel etiqueta = new JLabel(&quot;Indica un N\u00ba entero:&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, 60, 275, 60);\n\n        JTextField su_numero= new JTextField();\n        su_numero.setFont(new Font(&quot;Arial&quot;, Font.BOLD, 24));\n        su_numero.setBackground(Color.RED);\n        su_numero.setForeground(new Color(191,246,225));\n        su_numero.setBounds(375, 60, 220, 60);\n\n        JButton sus_factores=new JButton(&quot;Pulsa para calcular sus factores primos&quot; );\n        sus_factores.setFont(new Font(&quot;Arial&quot;, Font.BOLD, 24));\n        sus_factores.setBackground(Color.RED);\n        sus_factores.setForeground(new Color(191,246,225));\n        sus_factores.setBounds(45, 160, 600, 60);\n\n        JLabel resultado = new JLabel(&quot;Sus factores primos son:&quot;);\n        resultado.setFont(new Font(&quot;Arial&quot;, Font.BOLD, 22));\n        resultado.setBackground(Color.RED);\n        resultado.setForeground(new Color(191,246,225));\n        resultado.setOpaque(true);\n        resultado.setBounds(45, 290, 900, 60);\n\n        sus_factores.addActionListener(e-&gt;{\n            String introducido=su_numero.getText();\n            if (introducido.length()&gt;18){\n                resultado.setText(&quot;Por favor, deben ser menos de 18 d\u00edgitos.&quot;);\n            }\n            else {\n                try{\n                    long numero_entero=Long.parseLong(introducido);\n                    if (numero_entero&lt;2) {\n                        int falso=3\/0;\n                    }\n                    String resultado_texto=&quot;&quot;;\n                    ArrayList&lt;Long&gt; lista_primos= Operaciones.lista_factores(numero_entero);\n                    for (int k=0; k&lt;lista_primos.size(); k++){\n                        resultado_texto=resultado_texto+lista_primos.get(k)+&quot; - &quot;;\n                    }\n                    resultado.setText(resultado_texto);\n                }\n                catch (Exception exception){\n                    resultado.setText(&quot;Introduzca un n\u00famero entero mayor que 1.&quot;);\n                }\n\n            }\n\n        });\n\n        ventana_nueva.add(etiqueta);\n        ventana_nueva.add(su_numero);\n        ventana_nueva.add(sus_factores);\n        ventana_nueva.add(resultado);\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\">JLabel etiqueta = new JLabel(\u00abIndica un N\u00ba entero:\u00bb);<\/mark><\/em><\/strong> Instancia un el elemento de la clase JLabel y le asigna un texto a dicho componente.<\/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\">etiqueta.setFont(new Font(\u00abArial\u00bb, Font.BOLD, 24));<\/mark><\/em><\/strong> Le da formato al texto del objeto etiqueta. Si no se indicase, se le asignar\u00eda el de por defecto.<\/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\">etiqueta.setBackground(Color.RED);<\/mark><\/em><\/strong> Establece su color de fondo.<\/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\">etiqueta.setForeground(new Color(191,246,225));<\/mark><\/em><\/strong> Indica el color del texto. Vemos que hay dos formas de dar color a un componente, o bien directamente con el nombre del color (Color.RED), o bien indicando los tres valores del c\u00f3digo RGB del color (new Color (191,246,225).<\/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\">etiqueta.setOpaque(true);<\/mark><\/em><\/strong> Si establecemos un color de fondo para JLabel, debemos de especificar true para setOpaque. De lo contrario no se visualizar\u00eda dicho color de fondo.<\/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\">etiqueta.setBounds(45, 60, 275, 60);<\/mark><\/em><\/strong> En el archivo MiVentana que define el JFrame y que se muestra m\u00e1s abajo, se especifica como sistema de posicionamiento de los componentes de la ventana <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">setLayout(null);<\/mark><\/em><\/strong> Esto obliga a definir la posici\u00f3n exacta que va a tener el componente dentro de la ventana. En este caso se especifica que la x=45, la y=60, el ancho=275 y el alto=60.<\/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\">JTextField su_numero= new JTextField();<\/mark><\/em><\/strong> A continuaci\u00f3n se define un objeto de la clase JTextField, componente que nos servir\u00e1 para que el usuario pueda introducir datos. Los cuatro m\u00e9todos que le acompa\u00f1an, son los mismos que los definidos para JLabel (no requiere el setOpaque).<\/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\">JButton sus_factores=new JButton(\u00abCalcular factores primos\u00bb );<\/mark><\/em><\/strong> Declaramos un objeto de la clase JButton. Es el bot\u00f3n que desencadenar\u00e1 alguna acci\u00f3n sobre el c\u00f3digo.<\/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\">sus_factores.addActionListener(e-&gt;<\/mark><\/em><\/strong> Esta instrucci\u00f3n nos apunta a un bloque lambda que contiene el bloque (encerrado entre corchetes) que se ejecutar\u00e1 al pulsar sobre el bot\u00f3n. Este bloque puede consistir en una instrucci\u00f3n simple, un bloque completo, o una funci\u00f3n que ser\u00e1 invocada.<\/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\">String introducido=su_numero.getText();<\/mark><\/em><\/strong> Esta instrucci\u00f3n contenida dentro del bloque que se ejecutar\u00e1 al pulsar el bot\u00f3n, crear\u00e1 un objeto String donde quedar\u00e1 almacenado el contenido del campo JTextField, que ser\u00e1 el texto introducido por el usuario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El c\u00f3digo que viene despu\u00e9s comprueba que el texto introducido sea como mucho de 18 d\u00edgitos (lo hemos puesto as\u00ed para no poner un n\u00famero excesivamente grande que bloquee la ejecuci\u00f3n del c\u00f3digo). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s pasamos el String a tipo Long, si no es posible esta conversi\u00f3n, saltar\u00eda el catch. Verificamos que se trate de un n\u00famero mayor que 1, si fuese menor provocamos intencionadamente la excepci\u00f3n de divisi\u00f3n entre 0 y saltar\u00eda el c\u00f3digo contenido en cath.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hechas las comprobaciones, con la instrucci\u00f3n Operaciones.lista_factores(numero_entero); pasamos a esa funci\u00f3n contenida en el segundo archivo el n\u00famero obtenido. Dicha funci\u00f3n se encargar\u00e1 de buscar los factores primos en que se descompone. Dichos factores primos se almacenar\u00e1n como n\u00fameros en la lista lista_primos. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de darle formato de salida tipo texto a los n\u00fameros encontrados, los mostramos en el componente JLabel con la instrucci\u00f3n <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">resultado.setText(resultado_texto)<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el m\u00e9todo <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">ventana_nueva.add<\/mark><\/em><\/strong> a\u00f1adimos todos los componentes al JFrame.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> El segundo archivo contiene las operaciones necesarias para averiguar los factores primos del n\u00famero elegido. <\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>package Utilidades_numeros;\nimport java.util.ArrayList;\n\npublic class Operaciones {\n\n    public static ArrayList&lt;Long&gt; lista_factores(long descomponer){\n        long el_numero=descomponer;\n        boolean el_final;\n        ArrayList&lt;Long&gt; nueva_lista=new ArrayList&lt;&gt;();\n        el_final=false;\n\n        while (el_final==false){\n            long resultado=numero_primo(el_numero);\n            if (resultado==0) {\n                nueva_lista.add(el_numero);\n                el_final = true;\n            }\n            else{\n                nueva_lista.add(resultado);\n                el_numero=(el_numero\/resultado);\n            }\n        }\n        return nueva_lista;\n    }\n\n    public static long numero_primo(long el_numero){\n        int k;\n        for (k=2; (k&lt;=(el_numero\/2)); k=k+1) {\n            if ((el_numero % k) == 0)\n                return k;\n        }\n        return 0;\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Finalmente un tercer archivo contendr\u00e1 la clase MiVentana<\/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(1000, 600);\n        setResizable(false);\n        setLayout(null);\n        setDefaultCloseOperation(JFrame.DISPOSE_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}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n ejemplos de ejecuci\u00f3n del c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"996\" height=\"595\" src=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164352.png\" alt=\"\" class=\"wp-image-326\" style=\"aspect-ratio:1.6739908544569715;width:452px;height:auto\" srcset=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164352.png 996w, https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164352-300x179.png 300w, https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164352-768x459.png 768w\" sizes=\"auto, (max-width: 996px) 100vw, 996px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"994\" height=\"590\" src=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164522.png\" alt=\"\" class=\"wp-image-327\" style=\"aspect-ratio:1.6847518113504294;width:455px;height:auto\" srcset=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164522.png 994w, https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164522-300x178.png 300w, https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/10\/Screenshot_20261018_164522-768x456.png 768w\" sizes=\"auto, (max-width: 994px) 100vw, 994px\" \/><\/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; Dos de los componentes que m\u00e1s se van a utilizar en un entorno gr\u00e1fico de Java son: Debemos de tener en cuenta que cualquier componente debe de situarse en la ventana utilizando alguno de los tres sistemas de posicionamiento. Cada uno de ellos tiene unas ventajas y unos inconvenientes, por lo [&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-321","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/321","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=321"}],"version-history":[{"count":7,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/321\/revisions"}],"predecessor-version":[{"id":331,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/321\/revisions\/331"}],"wp:attachment":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}