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

📄 mainwindow.java

📁 UML设计测试工具
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * USE - UML based specification environment * Copyright (C) 1999-2004 Mark Richters, University of Bremen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* $ProjectHeader: use 2-3-0-release.1 Mon, 12 Sep 2005 20:18:33 +0200 green $ */package org.tzi.use.gui.main;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Event;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.print.PageFormat;import java.awt.print.Paper;import java.awt.print.PrinterJob;import java.beans.PropertyVetoException;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.Reader;import java.io.StringReader;import java.util.Iterator;import javax.swing.AbstractAction;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JComponent;import javax.swing.JDesktopPane;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JInternalFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JToolBar;import javax.swing.KeyStroke;import javax.swing.SwingUtilities;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.event.InternalFrameAdapter;import javax.swing.event.InternalFrameEvent;import org.tzi.use.config.Options;import org.tzi.use.gui.util.ExtFileFilter;import org.tzi.use.gui.util.StatusBar;import org.tzi.use.gui.util.TextComponentWriter;import org.tzi.use.gui.views.CallStackView;import org.tzi.use.gui.views.ClassExtentView;import org.tzi.use.gui.views.ClassInvariantView;import org.tzi.use.gui.views.CommandView;import org.tzi.use.gui.views.LinkCountView;import org.tzi.use.gui.views.ObjectCountView;import org.tzi.use.gui.views.ObjectPropertiesView;import org.tzi.use.gui.views.SequenceDiagramView;import org.tzi.use.gui.views.StateEvolutionView;import org.tzi.use.gui.views.View;import org.tzi.use.gui.views.diagrams.classdiagram.NewClassDiagramView;import org.tzi.use.gui.views.diagrams.objectdiagram.NewObjectDiagramView;import org.tzi.use.main.Session;import org.tzi.use.main.shell.Shell;import org.tzi.use.parser.USECompiler;import org.tzi.use.uml.mm.MClass;import org.tzi.use.uml.mm.MModel;import org.tzi.use.uml.mm.ModelFactory;import org.tzi.use.uml.ocl.type.TypeFactory;import org.tzi.use.uml.sys.MCmd;import org.tzi.use.uml.sys.MCmdCreateObjects;import org.tzi.use.uml.sys.MSystem;import org.tzi.use.uml.sys.MSystemException;import org.tzi.use.uml.sys.StateChangeEvent;import org.tzi.use.uml.sys.StateChangeListener;import org.tzi.use.util.Log;import org.tzi.use.util.USEWriter;/**  * The main application window of USE. *  * @version     $ProjectVersion: 2-3-0-release.1 $ * @author  Mark Richters */public class MainWindow extends JFrame implements StateChangeListener {    private Session fSession;    private StatusBar fStatusBar;    private LogPanel fLogPanel;    private PrintWriter fLogWriter;    private JDesktopPane fDesk;    private JSplitPane fTopSplitPane;    private ModelBrowser fModelBrowser;    private JMenuItem fMenuItemEditUndo;    private JButton fBtnEditUndo;    private JCheckBoxMenuItem fCbMenuItemCheckStructure;    private static final String DEFAULT_UNDO_TEXT = "Undo last state command";    private static final String STATE_EVAL_OCL = "Evaluate OCL expression";    private PageFormat fPageFormat;    private static MainWindow fInstance; // global instance of main window    private JButton addToToolBar(JToolBar toolBar,                                  AbstractAction action,                                  String toolTip) {        JButton tb = toolBar.add(action);        tb.setToolTipText(toolTip);        tb.setText("");        return tb;    }    MainWindow(Session session) {        super("USE");        fInstance = this;        fSession = session;        // the session may be changed from the shell        fSession.addChangeListener(new ChangeListener() {                public void stateChanged(ChangeEvent e) {                    SwingUtilities.invokeLater(new Runnable() {                            public void run() {                                sessionChanged();                            }                        });                }            });        fSession.addExecutedCmdListener(new Session.ExecutedCmdListener() {                public void executedCmd(Session.ExecutedCmd e) {                    final MCmd cmd = e.cmd();                    SwingUtilities.invokeLater(new Runnable() {                            public void run() {                                if (cmd.canUndo() )                                     enableUndo(cmd.name());                            }                        });                }            });        // create toolbar        JToolBar toolBar = new JToolBar();        addToToolBar(toolBar, fActionFileOpenSpec, "Open specification");        addToToolBar(toolBar, fActionFilePrint, "Print diagram");        toolBar.addSeparator();        fBtnEditUndo = addToToolBar(toolBar, fActionEditUndo, DEFAULT_UNDO_TEXT);        addToToolBar(toolBar, fActionStateEvalOCL, STATE_EVAL_OCL);        toolBar.addSeparator();        addToToolBar(toolBar, fActionViewCreateClassDiagram,                      "Create class diagram view");        addToToolBar(toolBar, fActionViewCreateObjectDiagram,                      "Create object diagram view");        addToToolBar(toolBar, fActionViewCreateClassInvariant,                      "Create class invariant view");        addToToolBar(toolBar, fActionViewCreateObjectCount,                      "Create object count view");        addToToolBar(toolBar, fActionViewCreateLinkCount,                      "Create link count view");        addToToolBar(toolBar, fActionViewCreateStateEvolution,                      "Create state evolution view");        addToToolBar(toolBar, fActionViewCreateObjectProperties,                      "Create object properties view");        addToToolBar(toolBar, fActionViewCreateClassExtent,                      "Create class extent view");        addToToolBar(toolBar, fActionViewCreateSequenceDiagram,                      "Create sequence diagram view");        addToToolBar(toolBar, fActionViewCreateCallStack,                      "Create call stack view");        addToToolBar(toolBar, fActionViewCreateCommandList,                      "Create command list view");        //addToToolBar(toolBar, fActionViewCreateStateTree, "Create state tree view");        // create the menubar        JMenuBar menuBar = new JMenuBar();        getRootPane().setJMenuBar(menuBar);        // `File' submenu        JMenuItem mi;        JMenu menu = new JMenu("File");        menu.setMnemonic('F');        menuBar.add(menu);        mi = menu.add(fActionFileOpenSpec);        mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK));        mi.setMnemonic('O');        mi = menu.add(fActionFileSaveScript);        mi.setMnemonic('S');                mi = menu.add(fActionFileSaveProtocol);                menu.addSeparator();        mi = menu.add(fActionFilePrinterSetup);        mi = menu.add(fActionFilePrint);        menu.addSeparator();        mi = menu.add(fActionFileExit);        mi.setMnemonic('x');        mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, Event.CTRL_MASK));        // `Edit' submenu        menu = new JMenu("Edit");        menu.setMnemonic('E');        menuBar.add(menu);        fMenuItemEditUndo = menu.add(fActionEditUndo);        fMenuItemEditUndo.setMnemonic('U');        fMenuItemEditUndo.setAccelerator(                                         KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK));        // `State' submenu        menu = new JMenu("State");        menu.setMnemonic('S');        menuBar.add(menu);        mi = menu.add(fActionStateCreateObject);        mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F7, 0));        mi.setMnemonic('C');        mi = menu.add(fActionStateEvalOCL);        mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0));        mi.setMnemonic('E');        mi = menu.add(fActionStateCheckStructure);        mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0));        mi.setMnemonic('s');        fCbMenuItemCheckStructure =             new JCheckBoxMenuItem("Check structure after every change");        fCbMenuItemCheckStructure.setMnemonic('h');        fCbMenuItemCheckStructure.setSelected(false);        menu.add(fCbMenuItemCheckStructure);            mi = menu.add(fActionStateReset);        mi.setMnemonic('R');        // `View' submenu        menu = new JMenu("View");        menu.setMnemonic('V');        menuBar.add(menu);        JMenu submenu = new JMenu("Create");        submenu.setMnemonic('C');        menu.add(submenu);        mi = submenu.add(fActionViewCreateObjectCount);        mi.setMnemonic('O');        mi = submenu.add(fActionViewCreateLinkCount);        mi.setMnemonic('L');        mi = submenu.add(fActionViewCreateClassDiagram);        mi.setMnemonic('V');        mi = submenu.add(fActionViewCreateObjectDiagram);        mi.setMnemonic('d');        mi = submenu.add(fActionViewCreateClassInvariant);        mi.setMnemonic('C');        mi = submenu.add(fActionViewCreateStateEvolution);        mi.setMnemonic('S');        mi = submenu.add(fActionViewCreateObjectProperties);        mi.setMnemonic('p');        mi = submenu.add(fActionViewCreateClassExtent);        mi.setMnemonic('e');        mi = submenu.add(fActionViewCreateSequenceDiagram);        mi.setMnemonic('q');        mi = submenu.add(fActionViewCreateCallStack);        mi.setMnemonic('a');        mi = submenu.add(fActionViewCreateCommandList);        mi.setMnemonic('i');        //mi = submenu.add(fActionViewCreateStateTree);        // experimental: must be enabled by switch at run-time        if (Options.extClassDiagram ) {            mi = menu.add(fActionViewClassDiagram);        }        menu.addSeparator();        mi = menu.add(fActionViewTile);        mi.setMnemonic('T');        mi = menu.add(fActionViewCloseAll);        mi.setMnemonic('a');        // `Help' submenu        menu = new JMenu("Help");        menu.setMnemonic('H');        menuBar.add(menu);        // not yet implemented in swing: menuBar.setHelpMenu(menu);        mi = menu.add(fActionHelpAbout);        mi.setMnemonic('A');            // create the browser panel         fModelBrowser = new ModelBrowser();        // create the desktop        fDesk = new JDesktopPane();        fDesk.setDesktopManager(new ViewManager());        // create the log panel        fLogPanel = new LogPanel();        fLogWriter =             new PrintWriter(new TextComponentWriter(fLogPanel.getTextComponent()),                             true);        // create status bar        fStatusBar = new StatusBar();        // put the three panels into split panes        JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,                                        fModelBrowser, fDesk);        sp.setDividerLocation(200);        fTopSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, sp, fLogPanel);        fTopSplitPane.setDividerLocation(400);        fTopSplitPane.setOneTouchExpandable(true);        // Layout and set the content pane        JPanel contentPane = new JPanel();        contentPane.setLayout(new BorderLayout());        contentPane.setPreferredSize(new Dimension(800, 550));        contentPane.add(toolBar, BorderLayout.NORTH);        contentPane.add(fTopSplitPane, BorderLayout.CENTER);        contentPane.add(fStatusBar, BorderLayout.SOUTH);        setContentPane(contentPane);        addWindowListener(new WindowAdapter() {                public void windowClosing(WindowEvent e) {                    close();                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -