swing:menus

Menus & Menu Items

Το μενού ενός παραθύρου αποτελείται από αντικείμενα των τριών παρακάτω κλάσεων.

  • MenuBar: Αποτελεί την μπάρα του μενού που εμφανίζεται στο πάνω μέρος του παραθύρου.
  • Menu: Αποτελεί μία καταχώρηση στην μπάρα. Μία μπάρα μπορεί να έχει πολλά Menus. Τα Menus δεν έχουν κάποιο configurable ActionListener, αλλά περιέχουν MenuItems που περιέχουν ActionListeners.
    • Προσοχή: Ένα αντικείμενο Menu μπορεί να περιέχει άλλα αντικείμενα Menu (εκτός από MenuItems), δηλ μπορούμε να έχουμε Menu μέσα σε Menu.
  • MenuItem: Περιέχει μία καταχώρηση η οποία μπορεί να έχει κάποιον ActionListener. Αντιστοιχεί σε μία επιλογή του Menu.

Δείτε το προηγούμενο παράδειγμα με χρήση Menus αντί για Buttons.

MenuDemo.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class MenuDemo extends JFrame implements ActionListener {
  public static final int WIDTH = 400;
  public static final int HEIGHT = 250;
 
  private JPanel redPanel;
  private JPanel whitePanel;
  private JPanel bluePanel;
 
  public static void main(String args[]) {
    MenuDemo gui = new MenuDemo();
    gui.setVisible(true);
  }
 
  public MenuDemo() {
    super("Panel Demonstration with Menu Selection");
    setSize(WIDTH, HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
 
    JPanel biggerPanel = new JPanel();
    biggerPanel.setLayout(new GridLayout(1,3));
 
    redPanel = new JPanel();
    redPanel.setBackground(Color.LIGHT_GRAY);
    biggerPanel.add(redPanel);
 
    whitePanel = new JPanel();
    whitePanel.setBackground(Color.LIGHT_GRAY);
    biggerPanel.add(whitePanel);
 
    bluePanel = new JPanel();
    bluePanel.setBackground(Color.LIGHT_GRAY);
    biggerPanel.add(bluePanel);
 
    add(biggerPanel, BorderLayout.CENTER);
 
    JMenu colorMenu = new JMenu("Choose Color");
    colorMenu.setBackground(Color.LIGHT_GRAY);
    colorMenu.setMnemonic(KeyEvent.VK_C);
 
    JMenuItem redMenuItem = new JMenuItem("Red");
    redMenuItem.setBackground(Color.RED);
    redMenuItem.addActionListener(this);    
    redMenuItem.setMnemonic(KeyEvent.VK_R);
    colorMenu.add(redMenuItem);
 
    JMenuItem whiteMenuItem = new JMenuItem("White");
    whiteMenuItem.setBackground(Color.WHITE);
    whiteMenuItem.addActionListener(this);
    whiteMenuItem.setMnemonic(KeyEvent.VK_W);
    colorMenu.add(whiteMenuItem);
 
    JMenuItem blueMenuItem = new JMenuItem("Blue");
    blueMenuItem.setBackground(Color.BLUE);
    blueMenuItem.addActionListener(this);
    blueMenuItem.setMnemonic(KeyEvent.VK_B);
    colorMenu.add(blueMenuItem);
 
    JMenuBar bar = new JMenuBar();
    bar.add(colorMenu);
    setJMenuBar(bar);  
 
  }
 
  public void actionPerformed(ActionEvent e) {
    String menuString = e.getActionCommand();
    if(menuString.equals("Red") ) {
      redPanel.setBackground(Color.RED);
      whitePanel.setBackground(Color.LIGHT_GRAY);
      bluePanel.setBackground(Color.LIGHT_GRAY);
    }
    else if(menuString.equals("White") ) {
      redPanel.setBackground(Color.LIGHT_GRAY);
      whitePanel.setBackground(Color.WHITE);
      bluePanel.setBackground(Color.LIGHT_GRAY);
    }
    else if(menuString.equals("Blue") ) {
      redPanel.setBackground(Color.LIGHT_GRAY);
      whitePanel.setBackground(Color.LIGHT_GRAY);
      bluePanel.setBackground(Color.BLUE);
    }
  }
}

Παρακάτω δίνεται ένα άλλο παράδειγμα κώδικα όπου έχουμε Menu μέσα σε Menu.

SubmenuEx.java
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
 
 
public class SubmenuEx extends JFrame {
 
  public SubmenuEx() {
 
    initUI();
  }
 
  private void initUI() {
 
    createMenuBar();
 
    setTitle("Submenu");
    setSize(360, 250);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
  }
 
  private void createMenuBar() {
 
    JMenuBar menubar = new JMenuBar();
 
    ImageIcon iconNew = new ImageIcon("icons/new.png");
    ImageIcon iconOpen = new ImageIcon("icons/open.png");
    ImageIcon iconSave = new ImageIcon("icons/save.png");
    ImageIcon iconExit = new ImageIcon("icons/exit.png");
 
    JMenu fileMenu = new JMenu("File");
 
    JMenu impMenu = new JMenu("Import");
 
    JMenuItem newsfMi = new JMenuItem("Import newsfeed list...");
    JMenuItem bookmMi = new JMenuItem("Import bookmarks...");
    JMenuItem mailMi = new JMenuItem("Import mail...");
 
    impMenu.add(newsfMi);
    impMenu.add(bookmMi);
    impMenu.add(mailMi);
 
    JMenuItem newMi = new JMenuItem("New", iconNew);
    JMenuItem openMi = new JMenuItem("Open", iconOpen);
    JMenuItem saveMi = new JMenuItem("Save", iconSave);
 
    JMenuItem exitMi = new JMenuItem("Exit", iconExit);
    exitMi.setToolTipText("Exit application");
 
    exitMi.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        System.exit(0);
      }
    });
 
    fileMenu.add(newMi);
    fileMenu.add(openMi);
    fileMenu.add(saveMi);
    fileMenu.addSeparator();
    fileMenu.add(impMenu);
    fileMenu.addSeparator();
    fileMenu.add(exitMi);
 
    menubar.add(fileMenu);
 
    setJMenuBar(menubar);    
  }
 
  public static void main(String[] args) {
 
    EventQueue.invokeLater(new Runnable() {
      @Override
      public void run() {
 
        SubmenuEx ex = new SubmenuEx();
        ex.setVisible(true);
      }
    });
  }
}
swing/menus.txt · Last modified: 2016/02/26 11:15 (external edit)