📄 mainframe.java
字号:
package org.jr.jzj;
/**
* <p>Copyright: Copyright (c) 2002-2003</p>
* <p>Company: JavaResearch(http://www.javaresearch.org)</p>
* <p>最后更新日期:2003年3月4日
* @author Cherami,Barney,Brain
* @version 0.8
*/
import java.io.*;
import java.util.*;
import java.util.prefs.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import org.jr.io.*;
import org.jr.swing.*;
import org.jr.swing.filter.*;
import org.jr.swing.util.*;
import org.jr.text.*;
import org.jr.util.*;
/**
* 系统的主界面类,完成界面的所有内容的构建。
*/
public class MainFrame
extends JFrame {
private static JZJLogger logger = new JZJLogger(MainFrame.class);
Preferences preference = JZipJar.preference;
JZJResources resource = JZJResources.getResources(); //系统所需的所有资源
public File currentDirectory = new File(preference.get("current_directory",
"."));
FileSizeFormat formatter = new FileSizeFormat(true);
Container contentPane;
JMenuBar menubar;
JToolBar toolbar;
NewAction newAction;
OpenAction openAction;
CloseAction closeAction;
ExitAction exitAction;
AddAction addAction;
DeleteAction deleteAction;
ExtractAction extractAction;
ViewAction viewAction;
LookFeelAction[] lookFeelActions;
OptionAction optionAction;
AboutAction aboutAction;
String[] lookfeelNames;
JSplitPane splitPane;
JScrollPane tablePane;
JScrollPane treePane;
JZJTree tree;
JZJTable table;
JPanel statusbar;
JLabel totaInforlLabel;
JLabel selectedInforLabel;
ExtractDialog extractDialog;
ViewFrame viewFrame;
AboutDialog aboutDialog;
OptionDialog optionDialog;
JZJTableModel tableModel;
JZJTreeModel treeModel;
String frameTitle;
String subTitle;
JZJFile currentZipFile;
Locale currentLocale = JZipJar.getSystemLocale();
String tmpDirectory = preference.get("work_directory",
System.getProperty("java.io.tmpdir", "."));
String[] selectedInfor = new String[2];
String[] totalInfor = new String[2];
MemoryWatchPanel memoryPanel;
RecentFilesManager recentFilesManager;
JDynamicButton newButton;
JDynamicButton closeButton;
JDynamicButton addButton;
JDynamicButton deleteButton;
JDynamicButton openButton;
JDynamicButton extractButton;
JDynamicButton viewButton;
JDynamicButton optionsButton;
JDynamicButton aboutButton;
JDynamicButton exitButton;
ArrayList toolbarButtons = new ArrayList();
JMenu fileMenu;
JMenuItem newMenuItem;
JMenuItem closeMenuItem;
JMenuItem addMenuItem;
JMenuItem deleteMenuItem;
JMenuItem openMenuItem;
JMenuItem extractMenuItem;
JMenuItem viewMenuItem;
JMenuItem aboutMenuItem;
JMenuItem exitMenuItem;
JMenuItem optionMenuItem;
/**
* 构造方法,完成界面所有元素的加载
*/
public MainFrame() {
init();
createToolbar();
createMenubar();
createTable();
createTree();
createSplitPane();
createStatusbar();
setJMenuBar(menubar);
contentPane.add(toolbar, "North");
contentPane.add(splitPane, "Center");
contentPane.add(statusbar, "South");
disableThem();
recentFilesManager = new RecentFilesManager(preference.getInt("recentfiles",
8), fileMenu, true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* 界面构成需要进行的所有初始化工作,主要是几个主要容器和Action的初始化。
*/
private void init() {
frameTitle = resource.getString("j_title");
setTitle(frameTitle);
contentPane = this.getContentPane();
menubar = new JMenuBar();
toolbar = new JToolBar();
statusbar = new JPanel();
newAction = new NewAction();
openAction = new OpenAction();
closeAction = new CloseAction();
exitAction = new ExitAction();
addAction = new AddAction();
deleteAction = new DeleteAction();
extractAction = new ExtractAction();
viewAction = new ViewAction();
optionAction = new OptionAction();
aboutAction = new AboutAction();
UIManager.LookAndFeelInfo[] lookfeels = UIManager.getInstalledLookAndFeels();
lookFeelActions = new LookFeelAction[lookfeels.length];
lookfeelNames = new String[lookfeels.length];
for (int i = 0; i < lookfeels.length; i++) {
lookfeelNames[i] = lookfeels[i].getName();
String lookfeelClassName = lookfeels[i].getClassName();
lookFeelActions[i] = new LookFeelAction(lookfeelClassName);
}
JZJFile.setWorkDirectory(tmpDirectory);
}
/**
* 创建工具栏。
*/
private void createToolbar() {
newButton = createToolbarButton("b_new");
newButton.addActionListener(newAction);
openButton = createToolbarButton("b_open");
openButton.addActionListener(openAction);
extractButton = createToolbarButton("b_extract");
extractButton.addActionListener(extractAction);
addButton = createToolbarButton("b_add");
addButton.addActionListener(addAction);
deleteButton = createToolbarButton("b_delete");
deleteButton.addActionListener(deleteAction);
viewButton = createToolbarButton("b_view");
viewButton.addActionListener(viewAction);
closeButton = createToolbarButton("b_close");
closeButton.addActionListener(closeAction);
optionsButton = createToolbarButton("b_option");
optionsButton.addActionListener(optionAction);
aboutButton = createToolbarButton("b_about");
aboutButton.addActionListener(aboutAction);
exitButton = createToolbarButton("b_exit");
exitButton.addActionListener(exitAction);
}
/**
* 创建所有菜单项。
*/
private void createMenubar() {
JMenu menu;
fileMenu = createTopMenu("m_file");
fileMenu.setMnemonic(KeyEvent.VK_F);
newMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_new"), fileMenu);
newMenuItem.addActionListener(newAction);
openMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_open"), fileMenu);
openMenuItem.addActionListener(openAction);
closeMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_close"), fileMenu);
closeMenuItem.addActionListener(closeAction);
fileMenu.addSeparator();
exitMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_exit"), fileMenu);
exitMenuItem.addActionListener(exitAction);
menu = createTopMenu("m_actions");
menu.setMnemonic(KeyEvent.VK_A);
addMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_add"), menu);
addMenuItem.addActionListener(addAction);
deleteMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_delete"), menu);
deleteMenuItem.addActionListener(deleteAction);
extractMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_extract"), menu);
extractMenuItem.addActionListener(extractAction);
viewMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_view"), menu);
viewMenuItem.addActionListener(viewAction);
menu = createTopMenu("m_option");
menu.setMnemonic(KeyEvent.VK_O);
optionMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_o_option"), menu);
optionMenuItem.addActionListener(optionAction);
JMenu lookfeelMenu = SwingUtil.createMenu( (MenuProperty) resource.
getObject("m_lookfeel"), menu);
ButtonGroup lookfeelGroup = new ButtonGroup();
JMenuItem menuItem;
for (int i = 0; i < lookfeelNames.length; i++) {
menuItem = new JRadioButtonMenuItem(lookfeelNames[i]);
menuItem.setMnemonic(lookfeelNames[i].charAt(0));
lookfeelMenu.add(menuItem);
menuItem.addActionListener(lookFeelActions[i]);
lookfeelGroup.add(menuItem);
}
menu = createTopMenu("m_help");
menu.setMnemonic(KeyEvent.VK_H);
aboutMenuItem = SwingUtil.createMenuItem( (MenuItemProperty) resource.
getObject("m_about"), menu);
aboutMenuItem.addActionListener(aboutAction);
}
private void createTree() {
treeModel = new JZJTreeModel();
tree = new JZJTree(treeModel, tableModel);
treePane = new JScrollPane();
treePane.getViewport().add(tree, null);
}
private void createSplitPane() {
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePane, tablePane);
}
/**
* 创建显示压缩包内容的表格。
*/
private void createTable() {
tableModel = new JZJTableModel(resource.getStringArray("t_columnnames"));
tableModel.setVisibleStatus(preference.getLong("table_status", 127));
table = new JZJTable(tableModel);
table.addHeaderListener();
tablePane = new JScrollPane(table);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.setHeader();
ListSelectionModel listSelectionModel = table.getSelectionModel();
listSelectionModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
setSelectedStatus(table.getSelectedEntryCount(),
table.getSelectedTotalSize());
}
});
}
/**
* 创建状态栏。
*/
private void createStatusbar() {
totaInforlLabel = new JLabel();
selectedInforLabel = new JLabel();
memoryPanel = new MemoryWatchPanel(resource.getString("i_memory"));
setStatus(0, 0, 0, 0);
statusbar.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
statusbar.setLayout(new GridLayout(1, 3));
totaInforlLabel.setBorder(BorderFactory.createBevelBorder(BevelBorder.
LOWERED));
selectedInforLabel.setBorder(BorderFactory.createBevelBorder(BevelBorder.
LOWERED));
memoryPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.
LOWERED));
statusbar.add(selectedInforLabel);
statusbar.add(totaInforlLabel);
statusbar.add(memoryPanel);
}
/**
* 创建工具栏的按钮。
* @param key 按钮在资源中的主键
* @return 根据主键及其信息创建的工具栏图像按钮
*/
private JDynamicButton createToolbarButton(String key) {
ButtonProperty buttonProperty;
JDynamicButton button;
buttonProperty = (ButtonProperty) resource.getObject(key);
button = new JDynamicButton(buttonProperty.text,
new ImageIcon(MainFrame.class.
getResource(buttonProperty.image)));
button.setToolTipText(buttonProperty.tooltip);
button.setVerticalTextPosition(AbstractButton.BOTTOM);
button.setHorizontalTextPosition(AbstractButton.CENTER);
toolbar.add(button);
return button;
}
/**
* 创建顶层主菜单。
* @param key 主菜单在资源中的主键
* @return 根据主键及其信息创建的主菜单
*/
private JMenu createTopMenu(String key) {
JMenu menu = SwingUtil.createMenu( (MenuProperty) resource.getObject(key), null);
menubar.add(menu);
return menu;
}
/**
* 设置工具栏的那些在某些情况下不能使用的按钮的状态为可用。
*/
private void enableThem() {
closeButton.setEnabled(true);
addButton.setEnabled(true);
deleteButton.setEnabled(true);
extractButton.setEnabled(true);
viewButton.setEnabled(true);
closeMenuItem.setEnabled(true);
addMenuItem.setEnabled(true);
deleteMenuItem.setEnabled(true);
extractMenuItem.setEnabled(true);
viewMenuItem.setEnabled(true);
}
/**
* 设置工具栏的那些在某些情况下不能使用的按钮的状态为不可用。
*/
private void disableThem() {
closeButton.setEnabled(false);
addButton.setEnabled(false);
deleteButton.setEnabled(false);
extractButton.setEnabled(false);
viewButton.setEnabled(false);
closeMenuItem.setEnabled(false);
addMenuItem.setEnabled(false);
deleteMenuItem.setEnabled(false);
extractMenuItem.setEnabled(false);
viewMenuItem.setEnabled(false);
}
/**
* 清除表格中的所有信息。
*/
private void removeAllRows() {
tableModel.clear();
treeModel.removeAll();
}
/**
* 设置状态栏的信息。
* @param selectedCount 选中的文件数
* @param selectedSize 选中的文件的大小的总和
* @param totalCount 总共的文件数
* @param totalSize 总共的文件的大小的总和
*/
protected void setStatus(int selectedCount, long selectedSize, int totalCount,
long totalSize) {
setSelectedStatus(selectedCount, selectedSize);
setTotalStatus(totalCount, totalSize);
}
/**
* 设置状态栏的选中部分的信息。
* @param selectedCount 选中的文件数
* @param selectedSize 选中的文件的大小的总和
*/
protected void setSelectedStatus(int selectedCount, long selectedSize) {
selectedInfor[0] = String.valueOf(selectedCount);
selectedInfor[1] = formatter.format(selectedSize);
String selected = StringUtil.getReplaceString(resource.getString(
"i_selected"), selectedInfor);
selectedInforLabel.setText(selected);
}
/**
* 设置状态栏的总体信息。
* @param totalCount 总共的文件数
* @param totalSize 总共的文件大小
*/
protected void setTotalStatus(int totalCount, long totalSize) {
totalInfor[0] = String.valueOf(totalCount);
totalInfor[1] = formatter.format(totalSize);
String total = StringUtil.getReplaceString(resource.getString("i_total"),
totalInfor);
totaInforlLabel.setText(total);
}
/**
* 添加文件。
*/
private void addFiles() {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(currentDirectory);
chooser.setMultiSelectionEnabled(true);
int r = chooser.showOpenDialog(this);
if (r == JFileChooser.APPROVE_OPTION) {
File[] selectedFiles = chooser.getSelectedFiles();
File path = chooser.getCurrentDirectory();
currentDirectory = path;
ArrayList addedFiles = new ArrayList();
for (int i = 0; i < selectedFiles.length; i++) {
String fileName = selectedFiles[i].getName();
if (currentZipFile.isContainEntry(fileName)) {
int selection = JOptionPane.showConfirmDialog(this,
resource.getString("i_file") + " " + fileName + " " +
resource.getString("i_exist") + resource.getString("i_overwrite"),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -