====== Menus & Menu Items ======
Το μενού ενός παραθύρου αποτελείται από αντικείμενα των τριών παρακάτω κλάσεων.
* **[[http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuBar.html|MenuBar]]:** Αποτελεί την μπάρα του μενού που εμφανίζεται στο πάνω μέρος του παραθύρου.
* **[[http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html|Menu]]:** Αποτελεί μία καταχώρηση στην μπάρα. Μία μπάρα μπορεί να έχει πολλά Menus. Τα Menus δεν έχουν κάποιο configurable ActionListener, αλλά περιέχουν MenuItems που περιέχουν ActionListeners.
* **Προσοχή:** Ένα αντικείμενο Menu μπορεί να περιέχει άλλα αντικείμενα Menu (εκτός από MenuItems), δηλ μπορούμε να έχουμε Menu μέσα σε Menu.
* **[[http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuItem.html|MenuItem]]:** Περιέχει μία καταχώρηση η οποία μπορεί να έχει κάποιον ActionListener. Αντιστοιχεί σε μία επιλογή του Menu.
Δείτε το προηγούμενο παράδειγμα με χρήση Menus αντί για Buttons.
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.
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);
}
});
}
}