📄 browsermdiframe.java
字号:
private void updateTitle() {
if (workspaceFile == null) {
setTitle(BrowserApplication.APPLICATION_TITLE);
if (actionSaveWorkspaceAs != null) {
actionSaveWorkspaceAs.setEnabled(false);
}
} else {
setTitle(BrowserApplication.APPLICATION_TITLE + " ["
+ workspaceFile.getName() + "]");
}
}
private JToolBar buildToolbar() {
JToolBar toolBar = new JToolBar();
toolBar.add(actionOpenClassFile).setIcon(ICON_OPEN_CLASS_FILE_LARGE);
//toolBar.add(actionBrowseClasspath).setIcon(ICON_BROWSE_CLASSPATH_LARGE);
toolBar.addSeparator();
// toolBar.add(actionOpenWorkspace).setIcon(ICON_OPEN_WORKSPACE_LARGE);
// toolBar.add(actionSaveWorkspace).setIcon(ICON_SAVE_WORKSPACE_LARGE);
// toolBar.addSeparator();
toolBar.add(actionBackward).setIcon(ICON_BACKWARD_LARGE);
toolBar.add(actionForward).setIcon(ICON_FORWARD_LARGE);
toolBar.addSeparator();
toolBar.add(actionReload).setIcon(ICON_RELOAD_LARGE);
toolBar.addSeparator();
toolBar.add(actionVerifyClass).setIcon(ICON_VERIFY_LARGE);
toolBar.addSeparator();
toolBar.add(actionRevertClass).setIcon(ICON_REVERT_LARGE);
//toolBar.addSeparator();
//toolBar.add(actionShowHomepage).setIcon(ICON_WEB_LARGE);
toolBar.setFloatable(false);
return toolBar;
}
private void repaintNow() {
JComponent contentPane = (JComponent) getContentPane();
contentPane.paintImmediately(0, 0, contentPane.getWidth(), contentPane
.getHeight());
JMenuBar menuBar = getJMenuBar();
menuBar.paintImmediately(0, 0, menuBar.getWidth(), menuBar.getHeight());
}
private void loadSettings() {
Preferences preferences = Preferences.userNodeForPackage(getClass());
workspaceChooserPath = preferences.get(SETTINGS_WORKSPACE_CHOOSER_PATH,
workspaceChooserPath);
classesChooserPath = preferences.get(SETTINGS_CLASSES_CHOOSER_PATH,
classesChooserPath);
recentMenu.read(preferences);
}
private void saveSettings() {
Preferences preferences = Preferences.userNodeForPackage(getClass());
preferences.put(SETTINGS_WORKSPACE_CHOOSER_PATH, workspaceChooserPath);
preferences.put(SETTINGS_CLASSES_CHOOSER_PATH, classesChooserPath);
recentMenu.save(preferences);
}
/*
private void doSaveWorkspace(boolean saveAs) {
config.setMDIConfig(createMDIConfig());
if (workspaceFile != null && !saveAs) {
saveWorkspaceToFile(workspaceFile);
return;
}
JFileChooser fileChooser = getWorkspaceFileChooser();
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (!selectedFile.getName().toLowerCase().endsWith(
"." + BrowserApplication.WORKSPACE_FILE_SUFFIX)) {
selectedFile = new File(selectedFile.getPath() + "."
+ BrowserApplication.WORKSPACE_FILE_SUFFIX);
}
if (selectedFile.exists()
&& GUIHelper.showOptionDialog(this, "The file "
+ selectedFile.getPath()
+ "\nexists. Do you want to overwrite this file?",
GUIHelper.YES_NO_OPTIONS,
JOptionPane.QUESTION_MESSAGE) != 0) {
return;
}
saveWorkspaceToFile(selectedFile);
workspaceFile = selectedFile;
updateTitle();
workspaceChooserPath = fileChooser.getCurrentDirectory()
.getAbsolutePath();
}
}
*/
private void saveWorkspaceToFile(File file) {
try {
FileOutputStream fos = new FileOutputStream(file);
XMLEncoder encoder = new XMLEncoder(fos);
encoder.writeObject(config);
encoder.close();
recentMenu.addRecentWorkspace(file);
} catch (FileNotFoundException e) {
GUIHelper.showMessage(this, "An error occured while saving to "
+ file.getPath(), JOptionPane.ERROR_MESSAGE);
}
GUIHelper.showMessage(this, "Workspace saved to " + file.getPath(),
JOptionPane.INFORMATION_MESSAGE);
actionSaveWorkspaceAs.setEnabled(true);
}
private void doNewWorkspace() {
closeAllFrames();
workspaceFile = null;
config = new BrowserConfig();
config.addRuntimeLib();
if (classpathBrowser != null) {
classpathBrowser.setClasspathComponent(config);
}
updateTitle();
}
/**
* Open a workspace file.
*
* @param file
* the file.
*/
public void openWorkspace(File file) {
repaintNow();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
closeAllFrames();
try {
FileInputStream fos = new FileInputStream(file);
XMLDecoder decoder = new XMLDecoder(fos);
config = (BrowserConfig) decoder.readObject();
readMDIConfig(config.getMDIConfig());
decoder.close();
recentMenu.addRecentWorkspace(file);
if (classpathBrowser != null) {
classpathBrowser.setClasspathComponent(config);
}
} catch (FileNotFoundException e) {
GUIHelper.showMessage(this, "An error occured while reading "
+ file.getPath(), JOptionPane.ERROR_MESSAGE);
} finally {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
workspaceFile = file;
updateTitle();
actionSaveWorkspaceAs.setEnabled(true);
}
/*
private void doOpenWorkspace() {
JFileChooser fileChooser = getWorkspaceFileChooser();
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
openWorkspace(selectedFile);
workspaceChooserPath = fileChooser.getCurrentDirectory()
.getAbsolutePath();
}
}
*/
private void doOpenClassFile() {
JFileChooser fileChooser = getClassesFileChooser();
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
repaintNow();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
File file = fileChooser.getSelectedFile();
classesChooserPath = fileChooser.getCurrentDirectory()
.getAbsolutePath();
BrowserInternalFrame frame;
if (file.getPath().toLowerCase().endsWith(".class")) {
frame = openClassFromFile(file);
} else {
frame = openClassFromJar(file);
}
if (frame != null) {
try {
frame.setMaximum(true);
} catch (PropertyVetoException ex) {
}
}
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
private BrowserInternalFrame openClassFromJar(File file) {
ClasspathArchiveEntry entry = new ClasspathArchiveEntry();
entry.setFileName(file.getPath());
if (jarBrowser == null) {
jarBrowser = new ClasspathBrowser(this, null,
"Classes in selected JAR file:", false);
}
jarBrowser.clear();
jarBrowser.setClasspathComponent(entry);
jarBrowser.setVisible(true);
String selectedClassName = jarBrowser.getSelectedClassName();
if (selectedClassName == null) {
return null;
}
String fileName = file.getPath() + "!" + selectedClassName + ".class";
BrowserInternalFrame frame = new BrowserInternalFrame(desktopManager,
new WindowState(fileName));
ClassFile classFile = frame.getClassFile();
if (classFile != null) {
config.addClasspathArchive(file.getPath());
}
return frame;
}
private void doBrowseClasspath() {
if (classpathBrowser == null) {
classpathBrowser = new ClasspathBrowser(this, config,
"Configured classpath:", true);
}
classpathBrowser.setVisible(true);
String selectedClassName = classpathBrowser.getSelectedClassName();
if (selectedClassName == null) {
return;
}
FindResult findResult = config.findClass(selectedClassName);
if (findResult == null) {
GUIHelper.showMessage(this, "Error loading " + selectedClassName,
JOptionPane.ERROR_MESSAGE);
return;
}
repaintNow();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
BrowserInternalFrame frame = new BrowserInternalFrame(desktopManager,
new WindowState(findResult.getFileName()));
try {
frame.setMaximum(true);
} catch (PropertyVetoException ex) {
}
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
private void doSetupClasspath() {
if (classpathSetupDialog == null) {
classpathSetupDialog = new ClasspathSetupDialog(this);
}
classpathSetupDialog.setVisible(true);
}
private void doBackward() {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
if (frame != null) {
frame.getBrowserComponent().getHistory().historyBackward();
}
}
private void doForward() {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
if (frame != null) {
frame.getBrowserComponent().getHistory().historyForward();
}
}
/*
* Public, since it is called after modifying the calss file
*/
public void doReload() {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
if (frame != null) {
TreePath selectionPath = frame.getBrowserComponent().getTreePane()
.getTree().getSelectionPath();
try {
BrowserTreeNode categoryNode2 = (BrowserTreeNode) selectionPath
.getPathComponent(2);
String categoryName = categoryNode2.getUserObject().toString();
frame.reload(categoryName);
} catch (Exception e) {
try {
BrowserTreeNode categoryNode2 = (BrowserTreeNode) selectionPath
.getPathComponent(1);
String categoryName = categoryNode2.getUserObject()
.toString();
frame.reload(categoryName);
} catch (Exception e2) {
frame.reload("");
}
}
}
}
private void doVerify() {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
String fileName = frame.getFileName();
VerifierDisplay vd = new VerifierDisplay(this, fileName);
vd.setVisible(true);
}
/*
private JFileChooser getWorkspaceFileChooser() {
if (workspaceFileChooser == null) {
workspaceFileChooser = new JFileChooser(workspaceChooserPath);
workspaceFileChooser.setDialogTitle("Choose workspace file");
workspaceFileChooser.setFileFilter(new BasicFileFilter(
BrowserApplication.WORKSPACE_FILE_SUFFIX,
"jclasslib workspace files"));
}
return workspaceFileChooser;
}*/
private JFileChooser getClassesFileChooser() {
if (classesFileChooser == null) {
classesFileChooser = new JFileChooser(classesChooserPath);
classesFileChooser.setDialogTitle("Choose class file or jar file");
classesFileChooser.addChoosableFileFilter(new BasicFileFilter(
"class", "class files"));
classesFileChooser.addChoosableFileFilter(new BasicFileFilter(
"jar", "jar files"));
classesFileChooser.setFileFilter(new BasicFileFilter(new String[] {
"class", "jar" }, "class files and jar files"));
}
return classesFileChooser;
}
private void doShowURL(String urlSpec) {
String commandLine;
if (System.getProperty("os.name").startsWith("Windows")) {
commandLine = "rundll32.exe url.dll,FileProtocolHandler " + urlSpec;
} else {
commandLine = "netscape " + urlSpec;
}
try {
Runtime.getRuntime().exec(commandLine);
} catch (IOException ex) {
}
}
void removeTempFiles() {
for (String fileName: tempFiles) {
new File(fileName).delete();
}
}
private void doAbout() {
new BrowserAboutDialog(this).setVisible(true);
}
private class DefaultAction extends AbstractAction {
private DefaultAction(String name, Icon icon) {
super(name, icon);
}
public void actionPerformed(ActionEvent ev) {
if (this == actionOpenClassFile) {
doOpenClassFile();
} else if (this == actionBrowseClasspath) {
doBrowseClasspath();
} else if (this == actionSetupClasspath) {
doSetupClasspath();
} else if (this == actionNewWorkspace) {
doNewWorkspace();
} else if (this == actionQuit) {
doQuit();
} else if (this == actionBackward) {
doBackward();
} else if (this == actionForward) {
doForward();
} else if (this == actionReload) {
doReload();
} else if (this == actionShowHomepage) {
doShowURL("http://www.cs.ioc.ee/~ando/jbe/");
} else if (this == actionShowHelp) {
try {
doShowURL(new File("doc/help.html").getCanonicalFile()
.toURL().toExternalForm());
} catch (IOException e) {
}
} else if (this == actionAbout) {
doAbout();
} else if (this == actionVerifyClass) {
doVerify();
}else if (this == actionRevertClass) {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
try {
FileUtils.copy(new File(frame.getBackupFile()), new File(frame.getFileName()));
doReload();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class UndoAction extends AbstractAction {
UndoAction(String name, Icon icon) {
super(name, icon);
}
public void actionPerformed(ActionEvent arg0) {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
CodeEditPane cep = frame.getBrowserComponent().getDetailPane()
.getAttributeDetailPane().getCodeAttributeDetailPane()
.getCodeEditPane();
TreePath treePath = frame.getBrowserComponent().getTreePane()
.getTree().getSelectionPath();
String methodIndex = Integer.toString(((BrowserTreeNode) treePath
.getParentPath().getLastPathComponent()).getIndex());
((CodeEditArea) cep.getEditPanes().get(methodIndex)).doUndo();
}
}
public class RedoAction extends AbstractAction {
RedoAction(String name, Icon icon) {
super(name, icon);
}
public void actionPerformed(ActionEvent arg0) {
BrowserInternalFrame frame = (BrowserInternalFrame) desktopPane
.getSelectedFrame();
CodeEditPane cep = frame.getBrowserComponent().getDetailPane()
.getAttributeDetailPane().getCodeAttributeDetailPane()
.getCodeEditPane();
TreePath treePath = frame.getBrowserComponent().getTreePane()
.getTree().getSelectionPath();
String methodIndex = Integer.toString(((BrowserTreeNode) treePath
.getParentPath().getLastPathComponent()).getIndex());
((CodeEditArea) cep.getEditPanes().get(methodIndex)).doRedo();
}
}
public Action getActionVerify() {
return actionVerifyClass;
}
public Action getActionRevert() {
return actionRevertClass;
}
public void addTempFile(String backupFile) {
tempFiles.add(backupFile);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -