Componentes Avanzados: JTabbedPane (Pestañas)

Clase JTabbedPane

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JTabbedPane
Las pestañas se nos presentan en java con la clase JTabbedPane. Recuerdo las primeras pestañas al revisar las propiedades del sistema en windows xp, haciendo click derecho sobre el icono de MiPC y luego en propiedades:
La idea es sencilla, mostrar el contenido de una pestaña en la ventana siempre que esta estuviera seleccionada y las demas no se nos muestran, permanecen a la espera hasta seleccionarlas. Son tipicas de las configuraciones de opciones y en los navegadores de internet.

Constructores:

  • JTabbedPane()
    • Crea un TabbedPane vacío, con una posición predeterminada superior.
  • JTabbedPane(int tabPlacement)
    • Crea una pestaña vacia pero con la posicion del entero del paramétro. Los posibles valores son:
      • JTabbedPane.TOP
      • JTabbedPane.BOTTOM
      • JTabbedPane.LEFT
      • JTabbedPane.RIGHT.
  • JTabbedPane(int tabPlacement, int tabLayoutPolicy)
    • Crea una pestaña vacia con la posicion daba(igual al anterior) y definimos loa norma de diseño. Los valores de tabLayoutPolicy son:
      • JTabbedPane.WRAP_TAB_LAYOUT
      • JTabbedPane.SCROLL_TAB_LAYOUT

Métodos:

  • add(Component component)
    • agrega el componente a la pestaña, que de titulo llevara el nombre del componente
  • add(Component component, int index)
    • agrega el componente al numero de pestaña indicado en el indice
  • add(String title, Component component)
    • agrega el componente y le da el nombre a la pestaña con el string
  • addTab(String title, Component component)
    • al parecer es igual a add() pero debe haber alguna diferencia minima que no conozco
  • addTab(String title, Icon icon, Component component)
    • agrega el componente, con un titulo y icono

Ejemplo con código:
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. public class Pestañas {
  5.     static JFrame marco = new JFrame();
  6.     static JTabbedPane pestaña = new JTabbedPane();
  7.     static JPanel panel1 = new JPanel();
  8.     static JButton saludo = new JButton("Pulsame");
  9.     static JLabel etiqueta = new JLabel("Adios");
  10.    
  11.     public static void main(String[] dar10){
  12.         marco.setTitle("Pestañas en Java");
  13.         marco.setSize(350,200);
  14.         marco.setLocationRelativeTo(null);
  15.         marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  16.         marco.setLayout(new BorderLayout() );
  17.        
  18.         saludo.addActionListener(new Pulsar() );
  19.         panel1.add(saludo);
  20.         pestaña.addTab("Pestaña 1", panel1);
  21.        
  22.         pestaña.add("Pestaña2", etiqueta);
  23.         marco.getContentPane().add(pestaña,BorderLayout.CENTER);
  24.                
  25.         marco.setVisible(true);
  26.     }
  27.     public static class Pulsar implements ActionListener{
  28.          String[] arreglo = {"Bien!  =)", "Maso", "Mal  =("};
  29.         public void actionPerformed (ActionEvent e){
  30.               JOptionPane.showOptionDialog(null, "¿Cómo estás?",
  31.                 "¡Hola!", JOptionPane.OK_CANCEL_OPTION,
  32.                 JOptionPane.INFORMATION_MESSAGE, null,
  33.                 arreglo , null);
  34.         }
  35.     }
  36. }
Resultado final:

Componentes avanzados: JMenuBar, JMenu y JMenuItem

JMenuBar, es la barra de menu tipica de cualquier programa que hayamos usado como por ejemplo el microsoft Word:
Una Barra de Menu contiene 3 elementos:
  1. JMenuBar: es la barra propiamente dicha donde se apoyan las 2 siguientes.
  2. JMenu: es la palabra que vemos sobre el JMenuBar y haciendo click sobre el se despliega una caja que contiene los items del menu
  3. JMenuItem: Cada uno de los items que se despliegan desde el JMenu
Gráficamente desde la vista del programa utorrent:
  • JMenuBar es la zona roja.
  • JMenu es cada uno de la palabras que vemos, en este caso Archivo, Opciones y Ayuda.
  • JMenuItem es cada uno de la sub-opciones de Archivo, como Agregar Torrent, Add Torrent(choose save dir), Agregar Torrent desde URL, Agregar Feed RSS, Agregar Dispositivo, Crear nuevo Torrent y Salir.
De manera jerarquica, este menu se ve:


Clase JMenuBar

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JMenuBar

Único Constructor:

  • JMenuBar()
    • Constructor sin parámetros, crea la barra de menu.

Métodos:

  • add(JMenu c)
    • Agrega el JMenu dado al final de la barra.

Clase JMenu

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.AbstractButton
javax.swing.JMenuItem
javax.swing.JMenu
Al parecer nuestro "menu" es clase hija de menuItem pero para nosotros el orden es este..

Constructores:

  • JMenu()
    • Crea un menu sin texto.
  • JMenuItem(String text)
    • Crea un menu con el texto del parámetro.
  • JMenuItem(String text, boolean b)
    • Crea un menu con un texto y se especifica como un menú de corte o no.

Métodos:

  • add(JMenuItem menuItem)
    • Agrega al menu el JMenuItem del paramétro.
  • add(String text)
    • Crea y agrega al menu un JMenuItem que ingresamos como texto.
  • addSeparator()
    • Agrega un separador al final del menu, como un item mas.

Clase JMenuItem

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.AbstractButton
javax.swing.JMenuItem

Constructores:

Podemos crear items de menu con texto, icono, combinación de ambas o d ninguno.
  • JMenuItem()
    • Crea un item de menu sin nada.
  • JMenuItem(Icon icon)
    • Crea un item de menu con el icono dado.
  • JMenuItem(String text)
    • Crea un item de menu con el texto del parámetro.
  • JMenuItem(String text, Icon icon)
    • Crea un item de menu con un texto y un icono.

Métodos:

Contamos con varios métodos, muchos que informan a los listeners de eventos producidos, vale la pena revisarlos, con el fin de ir tomando conocimiento tenemos.
  • setEnabled(boolean b)
    • De ser false no permite seleccionar el item, por ejemplo "desahacer" o "pegar" sin tener cambios o nada en el portapapeles.

Un ejemplo con código:
  1. import javax.swing.*;
  2. public class Menu {
  3.     static JFrame marco = new JFrame(); //La ventana
  4.     static JMenuBar barra = new JMenuBar(); //La Barra de menu
  5.     static JMenu menu1 = new JMenu("Archivo", false); //el menu archivo
  6.     static JMenu menu2 = new JMenu("Editar", true); //el menu editar
  7.     static JMenuItem item1 = new JMenuItem("Hola"); //un item para el menu archivo
  8.     static JMenuItem item2 = new JMenuItem("vacio"); //otro para editar
  9.    
  10.     public static void main(String[] Dar10){
  11.         //configuracion de la ventana
  12.         marco.setTitle("BARRA DE MENU");
  13.         marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  14.         marco.setLocationRelativeTo(null);
  15.         marco.setSize(250, 100);
  16.         marco.setLayout(null);
  17.        
  18.         menu1.add(item1);
  19.         menu1.addSeparator(); //agrega un separador
  20.         menu1.add("Chau"); //crea un item con el string
  21.         barra.add(menu1);
  22.        
  23.         item2.setEnabled(false); //deshabilita este item
  24.         menu2.add(item2);
  25.         barra.add(menu2);
  26.        
  27.         barra.setBounds(5, 5, 230, 12); //configuracion de la posicion y tamaño
  28.         marco.add(barra);
  29.        
  30.         marco.setVisible(true);
  31.     }
  32. }
El resultado en pantalla: