Java Tutorial/Swing/JCheckBoxMenuItem

Материал из Java эксперт
Перейти к: навигация, поиск

Check if a JCheckBoxMenuItem is selected in its item change listener

   <source lang="java">

import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; public class Main extends JFrame {

 JCheckBoxMenuItem check = new JCheckBoxMenuItem("Check");
 public Main() {
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JMenuBar bar = new JMenuBar();
   JMenu menu = new JMenu("Checkable");
   bar.add(menu);
   menu.add(check);
   check.addItemListener(new ItemListener() {
     public void itemStateChanged(ItemEvent e) {
       System.out.println("Checked? " + check.isSelected());
     }
   });
   setJMenuBar(bar);
   getContentPane().add(new JLabel("A placeholder"));
   pack();
   setSize(300, 300);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new Main();
 }

}</source>





Customizing JCheckBoxMenuItem Look and Feel

Property StringObject TypeCheckBoxMenuItem.acceleratorFontFontCheckBoxMenuItem.acceleratorForegroundColorCheckBoxMenuItem.acceleratorSelectionForegroundColorCheckBoxMenuItem.actionMapActionMapCheckBoxMenuItem.arrowIconIconCheckBoxMenuItem.backgroundColorCheckBoxMenuItem.borderBorderCheckBoxMenuItem.borderPaintedBooleanCheckBoxMenuItem.checkIconIconCheckBoxMenuItem.rumandSoundStringCheckBoxMenuItem.disabledForegroundColorCheckBoxMenuItem.fontFontCheckBoxMenuItem.foregroundColorCheckBoxMenuItem.gradientListCheckBoxMenuItem.marginInsetsCheckBoxMenuItem.opaqueBooleanCheckBoxMenuItem.selectionBackgroundColorCheckBoxMenuItem.selectionForegroundColorCheckBoxMenuItemUIString


Initialize JCheckBoxMenuItem with checked option

   <source lang="java">

import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; import javax.swing.JSeparator; import javax.swing.JTextField; public class SwingWinMenus extends JFrame {

 public static int WIDTH = 300;
 public static int HEIGHT = 300;
 public static String TITLE = "SwingWin";
 Container frameContainer;
 JTextField textField = new JTextField(50);
 JMenuBar menuBar = new JMenuBar();
 JMenu fileMenu = new JMenu("File");
 JMenuItem fileNew = new JMenuItem("New");
 JMenuItem fileOpen = new JMenuItem("Open");
 JMenuItem fileSave = new JMenuItem("Save");
 JMenuItem fileExit = new JMenuItem("Exit");
 JMenu editMenu = new JMenu("Edit");
 JMenuItem editCut = new JMenuItem("Cut");
 JMenuItem editCopy = new JMenuItem("Copy");
 JMenuItem editPaste = new JMenuItem("Paste");
 JMenu specialMenu = new JMenu("Special");
 JCheckBoxMenuItem specialCheck1 = new JCheckBoxMenuItem("Check 1");
 JCheckBoxMenuItem specialCheck2 = new JCheckBoxMenuItem("Check 2", true);
 JSeparator separator = new JSeparator();
 JRadioButtonMenuItem specialRadio1 = new JRadioButtonMenuItem("Radio 1");
 JRadioButtonMenuItem specialRadio2 = new JRadioButtonMenuItem("Radio 2");
 ButtonGroup buttonGroup = new ButtonGroup();
 public SwingWinMenus() {
   super("");
   fileMenu.add(fileNew);
   fileMenu.add(fileOpen);
   fileMenu.add(fileSave);
   fileMenu.add(fileExit);
   editMenu.add(editCut);
   editMenu.add(editCopy);
   editMenu.add(editPaste);
   specialMenu.add(specialCheck1);
   specialMenu.add(specialCheck2);
   specialMenu.add(separator);
   buttonGroup.add(specialRadio1);
   buttonGroup.add(specialRadio2);
   specialMenu.add(specialRadio1);
   specialMenu.add(specialRadio2);
   menuBar.add(fileMenu);
   menuBar.add(editMenu);
   menuBar.add(specialMenu);
   setJMenuBar(menuBar);
   frameContainer = getContentPane();
   frameContainer.setLayout(null);
   textField.setBounds(100, 100, 100, 20);
   frameContainer.add(textField);
   setupEventHandlers();
   setSize(450, 450);
   setVisible(true);
 }
 void setupEventHandlers() {
   addWindowListener(new WindowHandler());
   fileNew.addActionListener(new MenuItemHandler());
   fileOpen.addActionListener(new MenuItemHandler());
   fileSave.addActionListener(new MenuItemHandler());
   fileExit.addActionListener(new MenuItemHandler());
   editCut.addActionListener(new MenuItemHandler());
   editCopy.addActionListener(new MenuItemHandler());
   editPaste.addActionListener(new MenuItemHandler());
   specialCheck1.addItemListener(new ItemHandler());
   specialCheck2.addItemListener(new ItemHandler());
   specialRadio1.addItemListener(new ItemHandler());
   specialRadio2.addItemListener(new ItemHandler());
 }
 public static void main(String[] args) {
   SwingWinMenus app = new SwingWinMenus();
 }
 public class WindowHandler extends WindowAdapter {
   public void windowClosing(WindowEvent e) {
     System.exit(0);
   }
 }
 public class MenuItemHandler implements ActionListener {
   public void actionPerformed(ActionEvent e) {
     String cmd = e.getActionCommand();
     if (cmd.equals("Exit"))
       System.exit(0);
     else
       textField.setText(cmd);
   }
 }
 public class ItemHandler implements ItemListener {
   public void itemStateChanged(ItemEvent e) {
     AbstractButton button = (AbstractButton) e.getItem();
     String label = button.getText();
     if (button.isSelected())
       label += " true";
     else
       label += " false";
     textField.setText(label);
   }
 }

}</source>





Listening to JCheckBoxMenuItem Events with an ActionListener

   <source lang="java">

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.AbstractButton; import javax.swing.Icon; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class JCheckBoxMenuItemActionListener {

 public static void main(final String args[]) {
   JFrame frame = new JFrame("MenuSample Example");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JMenuBar menuBar = new JMenuBar();
   // File Menu, F - Mnemonic
   JMenu fileMenu = new JMenu("File");
   fileMenu.setMnemonic(KeyEvent.VK_F);
   menuBar.add(fileMenu);
   // File->New, N - Mnemonic
   JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);
   fileMenu.add(newMenuItem);
   JCheckBoxMenuItem caseMenuItem = new JCheckBoxMenuItem("Case Sensitive");
   caseMenuItem.setMnemonic(KeyEvent.VK_C);
   fileMenu.add(caseMenuItem);
   ActionListener aListener = new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       AbstractButton aButton = (AbstractButton) event.getSource();
       boolean selected = aButton.getModel().isSelected();
       String newLabel;
       Icon newIcon;
       if (selected) {
         newLabel = "A";
       } else {
         newLabel = "B";
       }
       aButton.setText(newLabel);
     }
   };
   caseMenuItem.addActionListener(aListener);
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Listening to JCheckBoxMenuItem with an ItemListener

   <source lang="java">

import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import javax.swing.AbstractButton; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class JCheckBoxMenuItemActionListener {

 public static void main(final String args[]) {
   JFrame frame = new JFrame("MenuSample Example");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JMenuBar menuBar = new JMenuBar();
   // File Menu, F - Mnemonic
   JMenu fileMenu = new JMenu("File");
   fileMenu.setMnemonic(KeyEvent.VK_F);
   menuBar.add(fileMenu);
   // File->New, N - Mnemonic
   JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);
   fileMenu.add(newMenuItem);
   JCheckBoxMenuItem caseMenuItem = new JCheckBoxMenuItem("Case Sensitive");
   caseMenuItem.setMnemonic(KeyEvent.VK_C);
   fileMenu.add(caseMenuItem);
   ItemListener iListener = new ItemListener() {
     public void itemStateChanged(ItemEvent event) {
       Icon girlIcon = new ImageIcon("girl-r.jpg");
       Icon boyIcon = new ImageIcon("boy-r.jpg");
       AbstractButton aButton = (AbstractButton)event.getSource();
       int state = event.getStateChange();
       String newLabel;
       Icon newIcon;
       if (state == ItemEvent.SELECTED) {
         newLabel = "Girl";
         newIcon = girlIcon;
       } else {
         newLabel = "Boy";
         newIcon = boyIcon;
       }
       aButton.setText(newLabel);
       aButton.setIcon(newIcon);
     }
   };
   caseMenuItem.addItemListener(iListener);
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>





Using JCheckBoxMenuItem: setMnemonic

   <source lang="java">

import java.awt.event.KeyEvent; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class JCheckBoxMenuItemDemo {

 public static void main(final String args[]) {
   JFrame frame = new JFrame("MenuSample Example");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JMenuBar menuBar = new JMenuBar();
   // File Menu, F - Mnemonic
   JMenu fileMenu = new JMenu("File");
   fileMenu.setMnemonic(KeyEvent.VK_F);
   menuBar.add(fileMenu);
   // File->New, N - Mnemonic
   JMenuItem newMenuItem = new JMenuItem("New", KeyEvent.VK_N);
   fileMenu.add(newMenuItem);
   JCheckBoxMenuItem caseMenuItem = new JCheckBoxMenuItem("Case Sensitive");
   caseMenuItem.setMnemonic(KeyEvent.VK_C);
   fileMenu.add(caseMenuItem);
   
   frame.setJMenuBar(menuBar);
   frame.setSize(350, 250);
   frame.setVisible(true);
 }

}</source>