?? designingpanel.java
字號:
/*
* DesigningPanel.java
*
* Created on August 3, 2007, 4:16 PM
*/
package dyno.swing.designer.main;
import dyno.swing.designer.beans.SwingDesigner;
import dyno.swing.designer.beans.Util;
import dyno.swing.designer.beans.actions.ActionCategory;
import dyno.swing.designer.beans.code.CodeSeed;
import dyno.swing.designer.beans.toolkit.BeanInfoToggleButton;
import dyno.swing.designer.beans.toolkit.ComponentPalette;
import dyno.swing.designer.main.actions.AboutAction;
import dyno.swing.designer.main.actions.ExitAction;
import dyno.swing.designer.main.actions.NewFileAction;
import dyno.swing.designer.main.actions.NewFileWorker;
import dyno.swing.designer.main.actions.OpenFileAction;
import dyno.swing.designer.main.actions.SaveAsFileAction;
import dyno.swing.designer.main.actions.SaveFileAction;
import dyno.swing.designer.main.actions.SourceParser;
import dyno.swing.designer.main.actions.SourceWorker;
import dyno.swing.designer.properties.types.Item;
import dyno.swing.designer.treeview.TreePalette;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.plaf.basic.BasicSplitPaneUI;
/**
*
* @author William Chen
*/
public class DesigningPanel extends JPanel implements InvocationHandler {
private double overallRatio = 0.73;
private double toolkitRatio = 0.2;
private double middleRatio = 0.75;
private CodeSeed seed;
private boolean dirty;
/** Creates new form DesigningPanel */
public DesigningPanel() {
initComponents();
seed = new CodeSeed(designer);
designer.addInvocationHandler(this);
}
public PrintWriter getWriter() {
return new PrintWriter(logger.getWriter());
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (isStateChange(method.getName())) {
setDirty(true);
}
return null;
}
public void setDirty(boolean d) {
dirty = d;
getSaveFileAction().setEnabled(dirty);
}
private boolean isStateChange(String methodName) {
return !dirty && (methodName.equals("componentAdded") || methodName.equals("componentDeleted") || methodName.equals("componentCut") || methodName.equals("componentPasted") || methodName.equals("componentEdited") || methodName.equals("componentResized") || methodName.equals("componentMoved"));
}
public void setSource(String code) {
txtSource.setText(code);
}
public void logging(String message) {
logger.logging(message);
}
public void logging(Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
pw.close();
logger.logging(sw.toString());
}
public void setProgressVisible(boolean b) {
CardLayout card = (CardLayout) getCardPanel().getLayout();
card.show(getCardPanel(), b ? "progress" : "designer");
}
public String getSource() {
return txtSource.getText();
}
private JSplitPane getSpToolkit() {
if (spToolkit == null) {
spToolkit = new JSplitPane();
spMiddle = getSpMiddle();
spToolkit.setRightComponent(spMiddle);
palette = getPalette();
palette.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
paletteActionPerformed(evt);
}
});
spToolkit.setLeftComponent(palette);
}
return spToolkit;
}
private ComponentPalette getPalette() {
if (palette == null) {
palette = new ComponentPalette(designer);
designer.setPalette(palette);
}
return palette;
}
private JSplitPane getSpMiddle() {
if (spMiddle == null) {
spMiddle = new JSplitPane();
spMiddle.setOrientation(JSplitPane.VERTICAL_SPLIT);
dsgPanel = getDsgPanel();
spMiddle.setTopComponent(dsgPanel);
logger = getLogger();
spMiddle.setBottomComponent(logger);
}
return spMiddle;
}
private JPanel getDsgPanel() {
if (dsgPanel == null) {
dsgPanel = new JPanel();
dsgPanel.setBorder(BorderFactory.createLineBorder(new Color(127, 157, 185)));
dsgPanel.setLayout(new BorderLayout());
dsgPanel.setBackground(Color.white);
cardPanel = getCardPanel();
dsgPanel.add(cardPanel, BorderLayout.CENTER);
}
return dsgPanel;
}
private JPanel getCardPanel() {
if (cardPanel == null) {
cardPanel = new JPanel(new CardLayout());
pPanel = getPPanel();
cardPanel.add(pPanel, "progress");
spDesigner = getSpDesigner();
cardPanel.add(spDesigner, "designer");
}
return cardPanel;
}
private ProgressPanel getPPanel() {
if (pPanel == null) {
pPanel = new ProgressPanel();
}
return pPanel;
}
private JScrollPane getSpDesigner() {
if (spDesigner == null) {
spDesigner = new JScrollPane();
designer = getDesigner();
spDesigner.getViewport().setOpaque(true);
spDesigner.getViewport().setBackground(Color.white);
spDesigner.getViewport().setView(designer);
}
return spDesigner;
}
private JToolBar getDesignerTools() {
if (designerTools == null) {
designerTools = new JToolBar();
designerTools.setFloatable(false);
designerTools.add(getNewFileAction());
designerTools.add(getOpenFileAction());
designerTools.add(getSaveFileAction());
Action[] actions = designer.getActions();
initActionButton(actions);
}
return designerTools;
}
public SwingDesigner getDesigner() {
if (designer == null) {
designer = new SwingDesigner();
}
return designer;
}
private LoggingPanel getLogger() {
if (logger == null) {
logger = new LoggingPanel();
}
return logger;
}
private TreePalette getRightPalette() {
if (rightPalette == null) {
rightPalette = new TreePalette(designer);
}
return rightPalette;
}
public void setRootComponent(Component comp) {
designer.setRootComponent(comp);
designer.repaint();
}
public void refreshRightPalette() {
rightPalette.refreshUI();
}
private JSplitPane getSpOverall() {
if (spOverall == null) {
spOverall = new JSplitPane();
spToolkit = getSpToolkit();
rightPalette = getRightPalette();
spOverall.setLeftComponent(spToolkit);
spOverall.setRightComponent(rightPalette);
}
return spOverall;
}
private void initActionButton(Action[] actions) {
for (Action action : actions) {
if (action instanceof ActionCategory) {
designerTools.addSeparator();
Action[] sub = ((ActionCategory) action).getSubActions();
initActionButton(sub);
} else {
designerTools.add(action);
}
}
}
private void initComponents() {
setLayout(new BorderLayout());
guiDsgPanel = getGuiDsgPanel();
add(guiDsgPanel, BorderLayout.CENTER);
menuBar = getMenuBar();
add(menuBar, BorderLayout.NORTH);
}
private JMenuBar getMenuBar() {
if (menuBar == null) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -