⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menuorientationexample.java

📁 一个用java开发界面的程序集(jfc核心编程)
💻 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 + -