📄 menuorientationexample.java
字号:
package JFCBook.Chapter6.jdk12;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import JFCBook.Chapter6.FileManager;
public class MenuOrientationExample extends JFrame {
public MenuOrientationExample(String title) {
super(title);
JMenuBar mb = new JMenuBar();
this.setJMenuBar(mb);
JMenu fileMenu = new JMenu("File");
fileMenu.setMnemonic('F');
mb.add(fileMenu);
newItem = new JMenuItem("New...", 'N');
openItem = new JMenuItem("Open...", 'O');
closeItem = new JMenuItem("Close", 'C');
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(closeItem);
fileMenu.setIcon(new ImageIcon(
getClass().getResource("images/folder.gif")));
newItem.setIcon(new ImageIcon(
getClass().getResource("images/new.gif")));
openItem.setIcon(new ImageIcon(
getClass().getResource("images/open.gif")));
fileMenu.addSeparator();
writeItem = new JCheckBoxMenuItem("Enable writing", true);
fileMenu.add(writeItem);
fileMenu.addSeparator();
saveItem = new JMenuItem("Save", 'S');
saveAsItem = new JMenuItem("Save As...", 'A');
fileMenu.add(saveItem);
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
fileListMenu = new JMenu("Recent Files");
fileListMenu.setMnemonic('R');
fileMenu.add(fileListMenu);
emptyListItem = new JMenuItem("Empty");
emptyListItem.setEnabled(false);
fileListMenu.add(emptyListItem);
fileMenu.addSeparator();
JMenuItem exitItem = new JMenuItem("Exit", 'x');
fileMenu.add(exitItem);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
closeWindow();
}
});
// Add accelerators
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK, false));
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK, false));
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK, false));
this.getContentPane().add(new JScrollPane(textArea = new JTextArea(20, 40)));
fileManager = new FileManager();
// Processing for the "File" menu
fileMenu.addMenuListener(new MenuListener() {
public void menuSelected(MenuEvent evt) {
boolean fileOpen = fileManager.isFileOpen();
// Allow close only if we have an open file
closeItem.setEnabled(fileOpen);
// Similarly, allow "Enable write" only if no open file
writeItem.setEnabled(fileOpen == false);
// If we have an open file, enable Save and Save As
// if the user has selected Enable Write AND the
// file can be written to.
boolean canSave = (fileOpen && writeItem.getState() &&
fileManager.canWrite());
saveItem.setEnabled(canSave);
saveAsItem.setEnabled(canSave);
}
public void menuDeselected(MenuEvent evt) {
// Not used
}
public void menuCanceled(MenuEvent evt) {
// Not used
}
});
// Processing for "New..." menu item
newItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String name = getFileName("New File", FileDialog.SAVE);
if (name != null) {
if (fileManager.isFileOpen()) {
// Close any open file
try {
fileManager.closeFile(textArea.getText());
} catch (Throwable e) {
// Ignore any exception
}
}
try {
fileManager.newFile(name);
textArea.setText("");
textArea.setEditable(true); // Always writable
writeItem.setState(true); // Check writable box
fileManager.setWritable(true); // Allow writes to file
addRecentFile(name);
} catch (IOException e) {
// Do nothing - message already printed
}
}
}
});
// Processing for "Open..." menu item
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String name = getFileName("Open File", FileDialog.LOAD);
if (name != null) {
try {
String text = fileManager.openFile(name);
textArea.setText(text);
// Enable for writing if allowed to
boolean canWrite = fileManager.canWrite() &&
writeItem.getState();
textArea.setEditable(canWrite);
fileManager.setWritable(writeItem.getState());
addRecentFile(name);
} catch (IOException e) {
// Do nothing - message already printed
}
}
}
});
// Processing for "Close..." menu item
closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
fileManager.closeFile(textArea.getText());
textArea.setText("");
} catch (IOException e) {
// Do nothing - message already printed
}
}
});
// Processing for "Save..." menu item
saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
fileManager.saveFile(textArea.getText());
} catch (IOException e) {
// Do nothing - message already printed
}
}
});
// Processing for "Save As..." menu item
saveAsItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (fileManager.isFileOpen()) {
String name = getFileName("Save As File", FileDialog.SAVE);
if (name != null) {
try {
fileManager.saveAsFile(name, textArea.getText());
} catch (IOException e) {
// Do nothing - message already printed
}
}
}
}
});
// Create the handler for the recent file list
menuListener = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JMenuItem mi = (JMenuItem)(evt.getSource());
String fileName = mi.getActionCommand();
try {
String text = fileManager.openFile(fileName);
textArea.setText(text);
addRecentFile(fileName);
// Enable for writing if allowed to
boolean canWrite = fileManager.canWrite() &&
writeItem.getState();
textArea.setEditable(canWrite);
fileManager.setWritable(writeItem.getState());
} catch (IOException e) {
// Do nothing - message already printed
}
}
};
}
// Add a name to the recent file list
public void addRecentFile(String fileName) {
int offset;
// Check whether this file is already in the file list
if ((offset = recentFiles.indexOf(fileName)) == -1) {
// Not present - add it at the beginning
recentFiles.insertElementAt(fileName, 0);
if (recentFiles.size() > RECENT_FILES) {
// List was full - remove the last (oldest) item
recentFiles.removeElementAt(RECENT_FILES);
}
} else {
// Already present: move this item to the front of the list
recentFiles.removeElementAt(offset);
recentFiles.insertElementAt(fileName, 0);
}
// Rebuild the file menu
buildRecentFileMenu();
}
// Build the recent file menu
public void buildRecentFileMenu() {
int size = recentFiles.size();
fileListMenu.removeAll();
for (int i = 1; i <= size; i++) {
String fileName = (String)(recentFiles.elementAt(i - 1));
JMenuItem mi = new JMenuItem();
mi.setActionCommand(fileName);
mi.setText(i + " " + fileName);
mi.setMnemonic('0' + i);
fileListMenu.add(mi);
mi.addActionListener(menuListener);
}
}
// Get a file name
public String getFileName(String title, int mode) {
FileDialog fd = new FileDialog(this, title, mode);
fd.setFile("*.*");
fd.setDirectory(directory);
fd.setVisible(true);
String dir = fd.getDirectory();
String file = fd.getFile();
if (dir == null || file == null) {
return null;
}
directory = dir;
String separator = System.getProperty("file.separator");
if (dir.endsWith(separator)) {
return dir + file;
} else {
return dir + System.getProperty("file.separator") + file;
}
}
// Take any action needed to close the application
public void closeWindow() {
try {
fileManager.closeFile(textArea.getText());
} catch (IOException e) {
System.out.println("Failed to write data on close.");
}
System.exit(0);
}
public static void main(String[] args) {
ResourceBundle bundle = null;
if (args.length > 0) {
String lang;
String country;
int index = args[0].indexOf("_");
if (index != -1) {
lang = args[0].substring(0, index);
country = args[0].substring(index + 1);
} else {
lang = args[0];
country = "";
}
Locale locale = new Locale(lang, country);
System.out.println("Country: " + locale.getDisplayCountry() +
", language: " + locale.getDisplayLanguage());
// Get the resource bundle for the selected locale
bundle = ResourceBundle.getBundle(
"java.text.resources.LocaleElements", locale);
}
JFrame f = new MenuOrientationExample("Component Orientation and Menus");
// If a locale was supplied, apply its orientation
// to the contents of the frame and the menus
if (bundle != null) {
// Apply to the frame
f.applyResourceBundle(bundle);
// Apply to the menus
MenuUtilities.applyOrientationToMenus(f.getJMenuBar(), bundle);
}
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
MenuOrientationExample frame = (MenuOrientationExample)(evt.getSource());
frame.closeWindow();
}
});
}
JMenuItem newItem;
JMenuItem openItem;
JMenuItem closeItem;
JMenuItem saveItem;
JMenuItem saveAsItem;
JMenuItem emptyListItem;
JMenu fileListMenu;
JCheckBoxMenuItem writeItem;
JTextArea textArea;
FileManager fileManager;
String directory = ""; // Current directory
ActionListener menuListener;
// Recently-used file list
static final int RECENT_FILES = 4;
Vector recentFiles = new Vector(RECENT_FILES);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -