Делаем главное меню с помощью JMenuBar

JMenuBar главное меню В арсенале компонентов графического интерфейса пользователя библиотеки Java Swing есть такой компонент, как главное меню JMenuBar. Главное меню JMenuBar, как правило располагается в верхней части окна приложения в виде горизонтальной полоски. Меню может иметь произвольную вложенность. Меню состоит из пунктов меню. При клике на пункте меню могут происходить какие-то действия, предусмотренные разработчиком. Давайте посмотрим, каким образом можно использовать JMenuBar для организации главного меню приложения. Для этого рассмотрим тестовый пример с самым простым главным меню.

При организации меню на Java Swing используется не только класс JMenuBar, но и JMenu и JMenuItem. Скорее даже JMenuBar практически не используется — основная работа при конструировании меню происходит с JMenu и JMenuItem. Кстати все эти классы располагаются в пакете javax.swing.* В самом простом случае мы создаем экземпляр JMenuBar, добавляем к нему необходимый набор JMenu и JMenuItem (иногда, обычно только JMenu), а затем говорим JFrame использовать в качестве главного меню наше свежеиспеченое при помощи метода setJMenuBar. Параметр у метода setJMenuBar один — ссылка на JMenuBar.

Как я уже сказал, для организации иерархии вложенности используются JMenu и JMenuItem. JMenuItem — это пункт меню, который представляет собой уже конкретную команду меню. JMenu — это меню, которое содержит внутри себя JMenuItem или вложенные меню JMenu. Давайте посмотрим на примере меню New, как и что организовать.

JMenu newMenu = new  JMenu("New");

JMenuItem txtFileItem = new JMenuItem("Text file");
newMenu.add(txtFileItem);

JMenuItem imgFileItem = new JMenuItem("Image file");
newMenu.add(imgFileItem);

JMenuItem folderItem = new JMenuItem("Folder");
newMenu.add(folderItem);

Всё предельно просто. Создаем объект JMenu, создаем JMenuItem, а затем при помощи метода add добавляем пункт меню к меню.

Исходный код тестового приложения представлен ниже.

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class TestFrame extends JFrame {
	
	public static void createGUI() {
		
		JFrame frame = new JFrame("Test frame");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Font font = new Font("Verdana", Font.PLAIN, 11);
		
		JMenuBar menuBar = new JMenuBar();
		
		JMenu fileMenu = new JMenu("File");
		fileMenu.setFont(font);
		
		JMenu newMenu = new JMenu("New");
		newMenu.setFont(font);
		fileMenu.add(newMenu);
		
		JMenuItem txtFileItem = new JMenuItem("Text file");
		txtFileItem.setFont(font);
		newMenu.add(txtFileItem);
		
		JMenuItem imgFileItem = new JMenuItem("Image file");
		imgFileItem.setFont(font);
		newMenu.add(imgFileItem);
		
		JMenuItem folderItem = new JMenuItem("Folder");
		folderItem.setFont(font);
		newMenu.add(folderItem);
		
		JMenuItem openItem = new JMenuItem("Open");
		openItem.setFont(font);
		fileMenu.add(openItem);
		
		JMenuItem closeItem = new JMenuItem("Close");
		closeItem.setFont(font);
		fileMenu.add(closeItem);
		
		JMenuItem closeAllItem = new JMenuItem("Close all");
		closeAllItem.setFont(font);
		fileMenu.add(closeAllItem);
		
		fileMenu.addSeparator();
		
		JMenuItem exitItem = new JMenuItem("Exit");
		exitItem.setFont(font);
		fileMenu.add(exitItem);
		
		exitItem.addActionListener(new ActionListener() {			
			public void actionPerformed(ActionEvent e) {
				System.exit(0);				
			}			
		});
		
		menuBar.add(fileMenu);
				
		frame.setJMenuBar(menuBar);
		
		frame.setPreferredSize(new Dimension(270, 225));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				createGUI();
			}
		});
	}
}
Advertisements

7 Responses to Делаем главное меню с помощью JMenuBar

  1. Олег says:

    Боюсь я не оригинален но все равно скажу — у Вас талант, статью очень доступны.
    Говорю как человек который изучает java самостоятельно ( к сожалению у нас в универе 6 Builder потолок чему учат и то мне на 2 курсе пока рано =) ) все статьи и примеры написаны очень толково — работать с ними одно удовольствие.
    Спасибо автору за его труд.

  2. ddjjzz says:

    Отличная статья. Самая аккуратная и доходчивая из тех 10 что я нашёл в гугле(на англ. и на русском)! Автор пиши ещё )
    Всех благ!

  3. LS says:

    Мне не понятно, как сортировать верхние пункты меню File и др.
    Когда их создаёшь они сортируются в непонятном порядке, перестановка кодов с пунктами меню результатов не даёт.

  4. Раиль says:

    Использую компонент для эмуляции Autocomplete. Проблем в том, что когда используешь SystemLookAndFeel у menuItem появляется справа пустое место под иконку я так понял… Как от этого избавиться а?

    Спасибо =)

  5. Andrew says:

    не всё гладко получается, но автору спасибо, и вообще сайт полезный

  6. sssVampiRsss says:

    Статья Супер Автору Респект)))))))))))

  7. artem says:

    попробуйте закоментировать «JFrame.setDefaultLookAndFeelDecorated(true);» она почти последняя. Мне кажется, что так лучше.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: