This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| swing:menus [2015/05/05 13:09] gthanos created | swing:menus [2016/02/26 11:15] (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Menus & Menu Items ====== | ====== 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. | ||
| + | |||
| + | <code java 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); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Παρακάτω δίνεται ένα άλλο παράδειγμα κώδικα όπου έχουμε Menu μέσα σε Menu. | ||
| + | |||
| + | <code java 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); | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||