User Tools

Site Tools


swing:menus

Menus & Menu Items

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

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

Δείτε το παράδειγμα που παρουσιάστηκε στην ενότητα που αφορά τους χρωματισμούς με χρήση 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: 2018/04/13 10:21 (external edit)