Удобство - вот сущность пользовательского интерфейса. Вот поэтому мы и обращаемся к дизайну пользовательского интерфейса. Если интерфейс вашей программы имеет меню, то они должны иметь удобную возможность - акселерированные клавиши, типа "Ctrl-S" для сохранения. Акселерированные клавиши делают меню более удобными для операций пользователя. Он может оперировать ими более легко и быстро с клавиатуры.
Давайте посмотрим, как мы можем внедрить клавиатурные акселераторы в Java программу. Класс java.awt.MenuShortcut предоставляет клавиатурный акселератор для java.awt.MenuItem. Ниже простой пример:
import java.awt.*;
import java.awt.event.*;
/** Convenience class to prepare a menu item. */
class MyMenuItem extends MenuItem {
/** Constructs a menu item with the specified shortcut key. */
public MyMenuItem(String label, int shortcutKey) {
this(label, shortcutKey, false);
}
/** Constructs a menu item with the specified shortcut key and
with/without the key. */
public MyMenuItem(String label, int shortcutKey,
boolean useShiftModifier) {
super(label);
setActionCommand(label);
setShortcut(new MenuShortcut(shortcutKey, useShiftModifier));
}
}
/** Demonstrates the use of menu shortcuts. */
public class MenuShortcutDemo extends Frame implements ActionListener {
// The labels for the individual menu items
public final static String OPEN_CMD = "Open";
public final static String SAVE_CMD = "Save";
public final static String PROP_CMD = "Properties";
public final static String EXIT_CMD = "Exit";
// The text area to show the output messages
private TextArea status;
/** Initialize. */
public MenuShortcutDemo() {
super("Menu Shortcut Demo");
}
/** Prepares the menu. */
public void prepareMenu() {
// Set the menu bar
MenuBar mb = new MenuBar();
setMenuBar(mb);
// Prepare the menu
Menu fileMenu = new Menu("File");
MenuItem openItem = new MyMenuItem(OPEN_CMD, KeyEvent.VK_O);
MenuItem saveItem = new MyMenuItem(SAVE_CMD, KeyEvent.VK_S);
MenuItem propItem = new MyMenuItem(PROP_CMD, KeyEvent.VK_P, true);
MenuItem exitItem = new MyMenuItem(EXIT_CMD, KeyEvent.VK_X);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator();
fileMenu.add(propItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
// Add menu to the menu bar
mb.add(fileMenu);
// Set the action listener
fileMenu.addActionListener(this);
}
/** Prepares the menu and adds an output textarea to the frame. */
public void initializeUI() {
// Prepare menu
prepareMenu();
// The text area for showing the output messages
status = new TextArea("", 10, 40);
status.setEditable(false);
add(status, BorderLayout.CENTER);
// Pack and show the frame
pack();
setVisible(true);
}
/** Handles menu actions (dummy method). */
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand();
if (cmd.equals(OPEN_CMD)) {
status.append("Open a file./n");
}
else if (cmd.equals(SAVE_CMD)) {
status.append("Save file./n");
}
else if (cmd.equals(PROP_CMD)) {
status.append("Show properties./n");
}
else if (cmd.equals(EXIT_CMD)) {
dispose();
System.exit(1);
}
}
/** Main. */
public static void main(String[] args) {
MenuShortcutDemo md = new MenuShortcutDemo();
md.initializeUI();
}
}
В этом примере метод main() инициализирует пользовательский интерфейс, используя метод initializeUI(). Этот метод сначала создает меню для приложения а затем добавляет текстовую область для отображения выходных сообщений. Завершение создания меню происходит в методе prepareMenu(). Сначала он устанавливает строку меню приложения, затем создает меню File и добавляет в него индивидуальные пункты создавая представления класса MyMenuItem.
Конструктор класса MyMenuItem делает две важные вещи:
1. Инициализирует метки пунктов меню
2. Устанавливает клавиши быстрого вызова (shortcut) для них
Метод setShortcut() из java.awt.MenuShortcut используется для установки клавиш быстрого вызова (shortcuts), которые воспринимают саму клавишу вызова и дополнительный флаг как параметры. Этот флаг сообщает, если была нажата клавиша во время нажатия клавиши быстрого вызова.
Как вы можете видеть - довольно легко применить эту возможность в пользовательском интерфейсе. Но следует держать все время в памяти одну важную вещь, заключающуюся в том, что бы выбирать клавиши акселерации в соответствии с уже устоявшимися стандартами, типа "Ctrl-O" для открытия файла. Для не устоявшихся ассоциаций клавиш и действий старайтесь, где это только возможно использовать интуитивно понятные сочетания, легкие для запоминания. Если кратко, то акселерированные меню - приятная возможность интерфейса и вы должны пытаться внедрять ее в ваши пользовательские интерфейсы.
Давайте посмотрим, как мы можем внедрить клавиатурные акселераторы в Java программу. Класс java.awt.MenuShortcut предоставляет клавиатурный акселератор для java.awt.MenuItem. Ниже простой пример:
import java.awt.*;
import java.awt.event.*;
/** Convenience class to prepare a menu item. */
class MyMenuItem extends MenuItem {
/** Constructs a menu item with the specified shortcut key. */
public MyMenuItem(String label, int shortcutKey) {
this(label, shortcutKey, false);
}
/** Constructs a menu item with the specified shortcut key and
with/without the key. */
public MyMenuItem(String label, int shortcutKey,
boolean useShiftModifier) {
super(label);
setActionCommand(label);
setShortcut(new MenuShortcut(shortcutKey, useShiftModifier));
}
}
/** Demonstrates the use of menu shortcuts. */
public class MenuShortcutDemo extends Frame implements ActionListener {
// The labels for the individual menu items
public final static String OPEN_CMD = "Open";
public final static String SAVE_CMD = "Save";
public final static String PROP_CMD = "Properties";
public final static String EXIT_CMD = "Exit";
// The text area to show the output messages
private TextArea status;
/** Initialize. */
public MenuShortcutDemo() {
super("Menu Shortcut Demo");
}
/** Prepares the menu. */
public void prepareMenu() {
// Set the menu bar
MenuBar mb = new MenuBar();
setMenuBar(mb);
// Prepare the menu
Menu fileMenu = new Menu("File");
MenuItem openItem = new MyMenuItem(OPEN_CMD, KeyEvent.VK_O);
MenuItem saveItem = new MyMenuItem(SAVE_CMD, KeyEvent.VK_S);
MenuItem propItem = new MyMenuItem(PROP_CMD, KeyEvent.VK_P, true);
MenuItem exitItem = new MyMenuItem(EXIT_CMD, KeyEvent.VK_X);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator();
fileMenu.add(propItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
// Add menu to the menu bar
mb.add(fileMenu);
// Set the action listener
fileMenu.addActionListener(this);
}
/** Prepares the menu and adds an output textarea to the frame. */
public void initializeUI() {
// Prepare menu
prepareMenu();
// The text area for showing the output messages
status = new TextArea("", 10, 40);
status.setEditable(false);
add(status, BorderLayout.CENTER);
// Pack and show the frame
pack();
setVisible(true);
}
/** Handles menu actions (dummy method). */
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand();
if (cmd.equals(OPEN_CMD)) {
status.append("Open a file./n");
}
else if (cmd.equals(SAVE_CMD)) {
status.append("Save file./n");
}
else if (cmd.equals(PROP_CMD)) {
status.append("Show properties./n");
}
else if (cmd.equals(EXIT_CMD)) {
dispose();
System.exit(1);
}
}
/** Main. */
public static void main(String[] args) {
MenuShortcutDemo md = new MenuShortcutDemo();
md.initializeUI();
}
}
В этом примере метод main() инициализирует пользовательский интерфейс, используя метод initializeUI(). Этот метод сначала создает меню для приложения а затем добавляет текстовую область для отображения выходных сообщений. Завершение создания меню происходит в методе prepareMenu(). Сначала он устанавливает строку меню приложения, затем создает меню File и добавляет в него индивидуальные пункты создавая представления класса MyMenuItem.
Конструктор класса MyMenuItem делает две важные вещи:
1. Инициализирует метки пунктов меню
2. Устанавливает клавиши быстрого вызова (shortcut) для них
Метод setShortcut() из java.awt.MenuShortcut используется для установки клавиш быстрого вызова (shortcuts), которые воспринимают саму клавишу вызова и дополнительный флаг как параметры. Этот флаг сообщает, если была нажата клавиша во время нажатия клавиши быстрого вызова.
Как вы можете видеть - довольно легко применить эту возможность в пользовательском интерфейсе. Но следует держать все время в памяти одну важную вещь, заключающуюся в том, что бы выбирать клавиши акселерации в соответствии с уже устоявшимися стандартами, типа "Ctrl-O" для открытия файла. Для не устоявшихся ассоциаций клавиш и действий старайтесь, где это только возможно использовать интуитивно понятные сочетания, легкие для запоминания. Если кратко, то акселерированные меню - приятная возможность интерфейса и вы должны пытаться внедрять ее в ваши пользовательские интерфейсы.