Читаем Java 7 полностью

Если tearOff == true и графическая оболочка умеет создавать отсоединяемое меню, то оно будет создано. В противном случае этот аргумент просто игнорируется.

Наконец, надо назначить действия командам меню. Команды меню типа MenuItem порождают события типа ActionEvent, поэтому нужно присоединить к ним объект класса-слушателя как к обычным компонентам, записав что-то вроде

create.addActionListener(new SomeActionEventHandler()); open.addActionListener(new AnotherActionEventHandler());

Пункты типа CheckboxMenuItem порождают события типа ItemEvent, поэтому надо обращаться к объекту-слушателю этого события:

disk.addItemListener(new SomeItemEventHandler());

Очень часто действия, записанные в командах меню, вызываются не только щелчком кнопки мыши, но и "горячими" клавишами-акселераторами (shortcut), действующими чаще всего при нажатой клавише . На экране в пунктах меню, которым назначены "горячие" клавиши, появляются подсказки вида Ctrl+N, Ctrl+O. "Горячая" клавиша определяется объектом класса MenuShortcut и указывается в его конструкторе константой класса KeyEvent, например:

MenuShortcut keyCreate = new MenuShortcut(KeyEvent.VK N);

После этого "горячей" будет комбинация клавиш +. Затем полученный объект указывается в конструкторе класса MenuItem:

MenuItem create = new MenuItem("Создать", keyCreate);

Нажатие комбинации клавиш + будет вызывать окно создания. Эти действия, разумеется, можно совместить, например:

MenuItem open = new MenuItem("Открыть...", new MenuShortcut(KeyEvent.VK O));

Можно добавить еще нажатие клавиши . Действие пункта меню будет вызываться нажатием комбинации клавиш ++, если воспользоваться вторым конструктором:

MenuShortcut(int key, boolean useShift); с аргументом useShift == true.

В листинге 10.9 приведена полная программа рисования с обработкой событий. Ее объяснение отложим до главы 15. Результат работы программы показан на рис. 10.10.

Листинг 10.9. Программа рисования с меню

import java.awt.*; import java.awt.event.*;

public class MenuScribble extends Frame{ public MenuScribble(String s){ super(s);

ScrollPane pane = new ScrollPane();

pane.setSize(300, 300); add(pane, BorderLayout.CENTER);

Scribble scr = new Scribble(this, 500, 500); pane.add(scr);

MenuBar mb = new MenuBar(); setMenuBar(mb);

Menu f = new Menu^'J^m");

Menu v = new MenuC'B^") ; mb.add(f); mb.add(v);

MenuItem open = new MenuItem("OTKpbiTb...",

new MenuShortcut(KeyEvent.VK O)); MenuItem save = new MenuItem("CoxpaHHTb",

new MenuShortcut(KeyEvent.VK S)); MenuItem saveAs = new MenuItem("CoxpaHHTb как..."); MenuItem exit = new MenuItem(,,Выxод,,,

new MenuShortcut(KeyEvent.VK Q)) ; f.add(open); f.add(save); f.add(saveAs); f.addSeparator(); f.add(exit);

open.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ FileDialog fd = new FileDialog(new Frame(),

" Загрузить", FileDialog.LOAD); fd.setVisible(true);

}

});

saveAs.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ FileDialog fd = new FileDialog(new Frame(),

" Сохранить", FileDialog.SAVE); fd.setVisible(true);

}

});

exit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0);

}

});

Menu c = new Menu("UBeT");

MenuItem clear = new MenuItem("Очистить",

new MenuShortcut(KeyEvent.VK D)); v.add(c); v.add(clear);

MenuItem red = new MenuItem("Красный");

MenuItem green = new MenuItem("3exeHbM");

MenuItem blue = new MenuItem("Синий");

MenuItem black = new MenuItem("4epHbM"); c.add(red); c.add(green); c.add(blue); c.add(black);

red.addActionListener(scr); green.addActionListener(scr); blue.addActionListener(scr); black.addActionListener(scr); clear.addActionListener(scr);

addWindowListener(new WinClose()); pack();

setVisible(true);

}

class WinClose extends WindowAdapter{

public void windowClosing(WindowEvent e){

System.exit(0);

}

}

public static void main(String[] args){

new MenuScribble(" \"Рисовалка\" с меню");

}

}

class Scribble extends Component implements

ActionListener, MouseListener, MouseMotionListener{ protected int lastX, lastY, w, h; protected Color currColor = Color.black; protected Frame f;

public Scribble(Frame frame, int width, int height){ f = frame; w = width; h = height; enableEvents (AWTEvent.MOUSE_EVENT_MASK |

AWTEvent. MOUSE_MOTION_EVENT_MASK) ; addMouseListener(this); addMouseMotionListener(this);

}

public Dimension getPreferredSize(){ return new Dimension(w, h);

}

public void actionPerformed(ActionEvent event){

String s = event.getActionCommand();

if (s.equals("Очистить")) repaint();

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных