Hola a todos, ¿qué tal? En este post vamos a ver los menús con CheckBox, es decir, va a consistir en una aplicación similar a un procesador de textos muy básico que va a contener tres menús: Fuente, Estilo y Tamaño, con un área de texto. Lo que vamos a hacer es crear los submenús del menú Estilo para que contengan un checkbox y darle funcionalidad:
De momento, el código del archivo lo único
que funciona es el menú Fuente que tiene unos submenús: Arial, Courier y
Verdana, de forma que si escribimos algo en el área de texto, seleccionamos
todo el texto o bien parte de él, al hacer clic en algún tipo de fuente el
texto nos cambia a la fuente seleccionada:
package swing;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import
javax.swing.text.StyledEditorKit;
public class MenuCheckBox {
public static void main(String[] args) {
MarcoMenuCheck mimarco = new
MarcoMenuCheck();
mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MarcoMenuCheck
extends JFrame {
public
MarcoMenuCheck(){
setVisible(true);
setBounds(550, 300, 550, 400);
LaminaMenuCheck milamina = new
LaminaMenuCheck();
add(milamina);
}
}
class LaminaMenuCheck
extends JPanel {
public
LaminaMenuCheck() {
setLayout(new
BorderLayout());
JPanel laminamenu = new JPanel();
//-------------MENÚS--------------------
JMenuBar barra = new JMenuBar();
fuente = new JMenu("Fuente");
estilo = new JMenu("Estilo");
tamaño = new JMenu("Tamaño");
//--------Tipo letra--------------------
ConfiguraMenu("Arial", "fuente", "Arial", 9, 10, "");
ConfiguraMenu("Courier", "fuente", "Courier", 9, 10, "");
ConfiguraMenu("Verdana", "fuente", "Verdana", 9, 10, "");
//--------Formato-------------------
//--------Tamaño letra-----------------
barra.add(fuente);
barra.add(estilo);
barra.add(tamaño);
laminamenu.add(barra);
add(laminamenu, BorderLayout.NORTH);
area = new JTextPane();
add(area, BorderLayout.CENTER);
}
public void
ConfiguraMenu(String rotulo, String menu, String tipoletra, int estilos, int tam, String ruta_icono) {
JMenuItem elementoMenu = new JMenuItem(rotulo, new ImageIcon(ruta_icono));
if(menu=="fuente") {
fuente.add(elementoMenu);
if(tipoletra=="Arial") {
elementoMenu.addActionListener(new
StyledEditorKit.FontFamilyAction("cambia_letra", "Arial"));
}else if(tipoletra=="Courier") {
elementoMenu.addActionListener(new
StyledEditorKit.FontFamilyAction("cambia_letra", "Courier"));
}else if(tipoletra=="Verdana") {
elementoMenu.addActionListener(new
StyledEditorKit.FontFamilyAction("cambia_letra", "Verdana"));
}
}
}
JTextPane area;
JMenu fuente, estilo, tamaño;
}
Este funcionamiento del cambio de tipo de
letra es debido al método ConfiguraMenu que a la misma vez que
crea los submenús también establece la acción que va a hacer cada uno de ellos.
Es un código largo pero que ya lo hemos visto
en apartados anteriores.
Como he comentado al principio, vamos a crear
los submenús Negrita y Cursiva con un ckeckbox y darle funcionalidad.
Si recordáis los CheckBox se utilizan para tener varias opciones seleccionadas a la
vez. Por lo que el texto puede estar en negrita y cursiva a la vez, o negrita,
o cursiva.
Para crear los checkbox en los submenús vamos
a utilizar la clase JCheckBoxMenuItem que no estaría de más
que revisarais en la API de Java su funcionamiento,
los constructores… para tener una idea más clara de cómo funciona esta clase.
Bien, pues empezamos, vamos al código y en la
línea de código comentada que pone Formato
vamos a crear los dos JCheckBoxMenuItem:
JCheckBoxMenuItem negrita = new JCheckBoxMenuItem("Negrita", new ImageIcon("src/swing/negrita.gif"));
JCheckBoxMenuItem cursiva = new JCheckBoxMenuItem("Cursiva", new ImageIcon("src/swing/cursiva.gif"));
Hemos instanciado la clase JCheckBoxMenuItem y le hemos pasado dos parámetros, el primero es el nombre del submenú y el segundo es una ruta donde está la imagen que queremos que aparezca al lado del submenú. Las imágenes que se han utilizado son las siguientes:
Posteriormente añadimos los JCheckBoxMenuItem al
menú Estilo:
estilo.add(negrita);
estilo.add(cursiva);
Probamos:
Vemos como se ha añadido los checkbox a los submenús.
Nos falta darle funcionalidad, de forma que
al clicar el check de Negrita el texto se convierta en negrita, así como si
clicamos en el ckeck Cursiva el texto se convierta en cursiva.
Antes de añadir los submenús al menú estilo,
hemos de utilizar el método ActionListener ya que va a
realizar una acción y como parámetro le vamos a pasar el método StyledEditorKit al
cual le vamos a pasar una constante de clase BOLD (para la negrita) o ITALIC (para
la cursiva):
negrita.addActionListener(new StyledEditorKit.BoldAction())
cursiva.addActionListener(new StyledEditorKit.ItalicAction());
Con esto ya tendríamos los JCheckBoxMenúItem creados
y con funcionalidad. El trozo de código completo para añadir los JCheckBoxMenuItem y darles
funcionalidad es el siguiente:
//--------Formato-------------------
JCheckBoxMenuItem negrita = new JCheckBoxMenuItem("Negrita", new ImageIcon("src/swing/negrita.gif"));
JCheckBoxMenuItem cursiva = new JCheckBoxMenuItem("Cursiva", new ImageIcon("src/swing/cursiva.gif"));
negrita.addActionListener(new StyledEditorKit.BoldAction());
cursiva.addActionListener(new StyledEditorKit.ItalicAction());
estilo.add(negrita);
estilo.add(cursiva);
Para completar la aplicación nos quedaría por
crear los submenús del menú Tamaño y darles funcionalidad, pero esto lo vamos a
hacer mediante el elemento radiobutton, será en el siguiente post.
Hasta pronto!
7.11 MENÚ CON IMÁGENES << >> 7.13MENÚ CON RADIOBUTTON
No hay comentarios:
Publicar un comentario