He encontrado un gusto particular en el uso de los cuadros de dialogo para mis ejemplos, pero existe una mejor manera, la cual es el uso de una Ventana en Java. Seguiré con otra parte importante de la GUI, esto es el objeto Button. Para la creación de Botones en Java con Jbutton se hará uso de la clase JButton de la swing, también podemos usar la clase Button, pero esta ultima no tiene algunas opciones útiles que posee un JButton.
CREANDO BOTONES EN JAVA
El siguiente codigo contendra las lineas basicas para la creacion y utilizacion de los botones en una ventana, las lineas estan debidamente comentareadas, asi que alli podran encontrar el por que de cada bloque o linea:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | //librerias necesarias import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class GuiJava implements ActionListener{//implementando el listener de eventos JButton bt1, bt2, bt3;//creando variables globales de los botones public GuiJava(){//constructor de la clase JFrame jf = new JFrame("Botones con Java");//creacion de ventana con el titulo jf.setLayout(new FlowLayout());//Configurar como se dispondra el espacio del jframe Dimension d = new Dimension();//objeto para obtener el ancho de la pantalla //Instanciando botones con texto bt1 = new JButton("Hola"); bt2 = new JButton("Que tal?"); bt3 = new JButton(" ;) "); //agregando los botones a la ventana jf.add(bt1); jf.add(bt2); jf.add(bt3); //añadiendo el listener a los botones para manipular los eventos del click bt1.addActionListener(this); bt2.addActionListener(this); bt3.addActionListener(this); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//finaliza el programa cuando se da click en la X jf.setResizable(false);//para configurar si se redimensiona la ventana jf.setLocation((int) ((d.getWidth()/2)+290), 50);//para ubicar inicialmente donde se muestra la ventana (x, y) jf.setSize(400, 250);//configurando tamaño de la ventana (ancho, alto) jf.setVisible(true);//configurando visualización de la venta } public static void main(String[] args) { GuiJava gj = new GuiJava();//uso de constructor para la ventana } @Override public void actionPerformed(ActionEvent e) {//sobreescribimos el metodo del listener if(e.getActionCommand().equals("Hola")){//podemos comparar por el contenido del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } if(e.getSource()==bt2){//podemos comparar por el nombre del objeto del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } if(e.getSource()==bt3){//podemos comparar por el nombre del objeto del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } } } |
//librerias necesarias import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class GuiJava implements ActionListener{//implementando el listener de eventos JButton bt1, bt2, bt3;//creando variables globales de los botones public GuiJava(){//constructor de la clase JFrame jf = new JFrame("Botones con Java");//creacion de ventana con el titulo jf.setLayout(new FlowLayout());//Configurar como se dispondra el espacio del jframe Dimension d = new Dimension();//objeto para obtener el ancho de la pantalla //Instanciando botones con texto bt1 = new JButton("Hola"); bt2 = new JButton("Que tal?"); bt3 = new JButton(" ;) "); //agregando los botones a la ventana jf.add(bt1); jf.add(bt2); jf.add(bt3); //añadiendo el listener a los botones para manipular los eventos del click bt1.addActionListener(this); bt2.addActionListener(this); bt3.addActionListener(this); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//finaliza el programa cuando se da click en la X jf.setResizable(false);//para configurar si se redimensiona la ventana jf.setLocation((int) ((d.getWidth()/2)+290), 50);//para ubicar inicialmente donde se muestra la ventana (x, y) jf.setSize(400, 250);//configurando tamaño de la ventana (ancho, alto) jf.setVisible(true);//configurando visualización de la venta } public static void main(String[] args) { GuiJava gj = new GuiJava();//uso de constructor para la ventana } @Override public void actionPerformed(ActionEvent e) {//sobreescribimos el metodo del listener if(e.getActionCommand().equals("Hola")){//podemos comparar por el contenido del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } if(e.getSource()==bt2){//podemos comparar por el nombre del objeto del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } if(e.getSource()==bt3){//podemos comparar por el nombre del objeto del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } } }
Comenzando vemos que es necesaria la importación de las librerías, podemos simplificar las librerías como el siguiente ejemplo:
1 2 | import java.awt.*; import javax.swing.*; |
import java.awt.*; import javax.swing.*;
Lo anterior no lo hago por cuestión de rendimiento, con esto quiero decir, que no es necesario cargar librerías que no usaremos, una de las ventajas de Netbeans corresponde a este punto, el agrega las librerías necesarias en cada clase. Una vez ejecutada la aplicación veremos lo siguiente:
Vemos lo que aparece cuando oprimimos el tercer botón.
PERSONALIZAR BOTONES
Ahora, podemos modificar ciertos atributos de estos objetos para hacerlos mas llamativos al usuario, o como también hacer ajustes en el margen del texto si vemos que el espacio es mucho, al igual que el anterior ejemplo el siguiente código esta comentareado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | //librerias necesarias import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class GuiJava implements ActionListener{//implementando el listener de eventos JButton bt1, bt2, bt3;//creando variables globales de los botones JFrame jf = new JFrame("Botones con Java");//creacion de ventana con el titulo public GuiJava(){//constructor de la clase jf.setLayout(new FlowLayout());//Configurar como se dispondra el espacio del jframe Dimension d = new Dimension();//objeto para obtener el ancho de la pantalla //imagen para el boton ImageIcon ic1 = new ImageIcon("src/guijava/imagen1.png"); //Instanciando botones con texto bt1 = new JButton("Hola"); bt2 = new JButton("Tamaño"); bt3 = new JButton(ic1); //creamos el boton con una imagen //margenes para texto en boton bt1.setMargin(new Insets(3, 5, 3, 5)); bt2.setMargin(new Insets(1, 1, 1, 1)); //color de fondo del boton bt1.setBackground(Color.orange); //color de texto para el boton bt2.setForeground(Color.blue); //agregando los botones a la ventana jf.add(bt1); jf.add(bt2); jf.add(bt3); //añadiendo el listener a los botones para manipular los eventos del click bt1.addActionListener(this); bt2.addActionListener(this); bt3.addActionListener(this); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//finaliza el programa cuando se da click en la X jf.setResizable(false);//para configurar si se redimensiona la ventana jf.setLocation((int) ((d.getWidth()/2)+290), 50);//para ubicar inicialmente donde se muestra la ventana (x, y) jf.setSize(400, 250);//configurando tamaño de la ventana (ancho, alto) jf.setVisible(true);//configurando visualización de la venta } public static void main(String[] args) { GuiJava gj = new GuiJava();//uso de constructor para la ventana } @Override public void actionPerformed(ActionEvent e) {//sobreescribimos el metodo del listener if(e.getActionCommand().equals("Hola")){//podemos comparar por el contenido del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } if(e.getSource()==bt2){//podemos comparar por el nombre del objeto del boton jf.setExtendedState(JFrame.MAXIMIZED_BOTH);//cambiamos el tamaño de la ventana } if(e.getSource()==bt3){//podemos comparar por el nombre del objeto del boton JOptionPane.showMessageDialog(null, "Escogiste Guiño"); } } } |
//librerias necesarias import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class GuiJava implements ActionListener{//implementando el listener de eventos JButton bt1, bt2, bt3;//creando variables globales de los botones JFrame jf = new JFrame("Botones con Java");//creacion de ventana con el titulo public GuiJava(){//constructor de la clase jf.setLayout(new FlowLayout());//Configurar como se dispondra el espacio del jframe Dimension d = new Dimension();//objeto para obtener el ancho de la pantalla //imagen para el boton ImageIcon ic1 = new ImageIcon("src/guijava/imagen1.png"); //Instanciando botones con texto bt1 = new JButton("Hola"); bt2 = new JButton("Tamaño"); bt3 = new JButton(ic1); //creamos el boton con una imagen //margenes para texto en boton bt1.setMargin(new Insets(3, 5, 3, 5)); bt2.setMargin(new Insets(1, 1, 1, 1)); //color de fondo del boton bt1.setBackground(Color.orange); //color de texto para el boton bt2.setForeground(Color.blue); //agregando los botones a la ventana jf.add(bt1); jf.add(bt2); jf.add(bt3); //añadiendo el listener a los botones para manipular los eventos del click bt1.addActionListener(this); bt2.addActionListener(this); bt3.addActionListener(this); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//finaliza el programa cuando se da click en la X jf.setResizable(false);//para configurar si se redimensiona la ventana jf.setLocation((int) ((d.getWidth()/2)+290), 50);//para ubicar inicialmente donde se muestra la ventana (x, y) jf.setSize(400, 250);//configurando tamaño de la ventana (ancho, alto) jf.setVisible(true);//configurando visualización de la venta } public static void main(String[] args) { GuiJava gj = new GuiJava();//uso de constructor para la ventana } @Override public void actionPerformed(ActionEvent e) {//sobreescribimos el metodo del listener if(e.getActionCommand().equals("Hola")){//podemos comparar por el contenido del boton JOptionPane.showMessageDialog(null, e.getActionCommand()); } if(e.getSource()==bt2){//podemos comparar por el nombre del objeto del boton jf.setExtendedState(JFrame.MAXIMIZED_BOTH);//cambiamos el tamaño de la ventana } if(e.getSource()==bt3){//podemos comparar por el nombre del objeto del boton JOptionPane.showMessageDialog(null, "Escogiste Guiño"); } } }
Una vez ejecutado veremos lo siguiente:
No ha sido una buena combinación de colores, pero bueno, la idea es mostrar que se puede modificar tanto el fondo como el colo de la letra, la imagen del botón es proporcional al tamaño real de la imagen, así que desean un tamaño acorde seria algo como 40px ancho y 40px alto. Ademas algo con respecto a la ventana, cuando seleccionemos el botón «Tamaño» veremos como se cambia el tamaño de nuestra ventana en java.
Muchas gracias!
Hola :), primero que nada, felicidades por tu sitio, muy bien explicado y que padre que compartas tus conocimientos ;), no se si me puedas ayudar con una idea para que el usuario final pueda agregar un botón donde él de «click», es decir, tengo que agregar un plano y el usuario tiene que dar click donde quiera agregar un botón donde él guste y luego ese botón despliegue información, muchas gracias y ojalá me pueda echar la mano, saludos!!!
CLARO Y BUENO
Cómo podría hacer para pintar una imagen en un JButton, en éste caso tengo la imagen de un diente en un boton (estoy tratando de hacer un odontograma) y debo pintarlo de acuerdo a lo que necesite, por ej si un tratamiento es iniciado pintar en azul, si esta concluido con verde y así, espero recibir tu ayuda.
Que tal amigo ? Como podría cambiar el color de los botones teniendo imágenes dentro de los botones, bueno estoy tratando de hacer un odontograma, y dentro de cada botón tengo la imagen de un diente, y lo que debe hacer es que cuando marco el diente, debo de pintarlo de acuerdo a su procedimiento, ej: rojo si esta en tratamiento, verde si esta concluido, azul si es un tratamiento a realizar, espero entiendas lo que quiero decirte. Te agradecería mucho si pudieras ayudarme
Bueno, según entiendo, la mejor forma que veo para que lo hagas, es tener la imagen del diente con diversos colores, y cada vez que se le asigne un tipo de procedimiento, cambie la imagen. Espero entiendas lo que trato de decirte.
Si, lo entiendo perfectamente. Y ese cambio lo hago sobre poniendo las imágenes ? o como cree usted que sería mejor. Y gracias, ahora ya tengo un panorama mejor
Hola Walter, disculpa la demora en contestarte. En el siguiente articulo podrás encontrar un practico ejemplo de lo que requieres. Ahora bien, se me ocurre que ademas de lo que ves en el articulo, podrías usar un confirm para elegir el color que iría, y así mismo almacenar el tipo escogido.
Es decir, cuando se de click en el botón del diente, salte un confirm, y allí que vayan las opciones de tipo numero, luego una vez seleccionado el numero, se cambie el color dependiente del numero elegido.
hola usted sabe como puedo crear un boton dentro de otro boton??
Vaya, me haz ayudado en dos proyectos jaja, muchas gracias. +10 y a favoritos lince galáctico. Suerte :D.
Excelente!!
Gracias por tu ayuda 🙂
Una pregunta de donde salieron esos import? no entendi bien
Excelente, muchas gracias. Estoy viendo Tópicos Avanzados de Programación y esto realmente me sirvió mucho, 🙂
Excelente post, me ayudó a recordar lo que ya ví, saludos.
Excelente post, me ayudó a recordar lo que vi al principio del semestre, saludos.
😀
EXCELENTE ES BASICO PERO ES SIMPLEMENTE EXCELENYE
Amigo saludos desde paraguay, como creo esas letras con movimiento es muy interesante.
Excelente post!
Estoy iniciándome en este lenguaje y me encanta!
sds.
Hola, tengo un codigo que me arroja los colores, pero ahora me lo pidieron dinamico; Asi que necesito crear un codigo que tenga botones y que al dar clik por ejemplo «Azul» me arroje mi rectangulo azul y asi con los demas colores :T
Hola daniela, supongamos que tienes un jlabel de un ancho y alto que lo haga lucir como una caja, y el numero de botones que quieras. En cada evento del botón pon el nombre del jlabel y usa el método setForeground, un ejemplo de esto es lo siguiente:
tuJLabel.setForeground(Color.colorQueQuieresEnIngles);
El anterior código va dentro de cada evento del botón, en el color que quieres, ira el nombre del color pero en ingles. Éxitos!