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

📄 concretegenericfigure.java

📁 拥有图形界面的
💻 JAVA
字号:
package org.joone.edit;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;import javax.swing.*;import CH.ifa.draw.framework.*;import CH.ifa.draw.standard.*;import CH.ifa.draw.figures.*;import CH.ifa.draw.util.*;import org.joone.log.*;import org.joone.edit.inspection.InspectionFrame;import org.joone.inspection.Inspectable;/** Graphic representation of a generic figure in the net */public abstract class ConcreteGenericFigure extends CompositeFigure implements GenericFigure, UpdatableFigure {        /**     * Logger     * */    public static final ILogger log = LoggerFactory.getLogger(ConcreteGenericFigure.class);        protected static final int BORDER = 3;    protected Rectangle fDisplayBox;    protected java.util.Hashtable params;    protected static int numLayers = 0;    private static final long serialVersionUID=-6051314440171003005L;        public ConcreteGenericFigure() {    }        protected void basicMoveBy(int x, int y) {        fDisplayBox.translate(x, y);        super.basicMoveBy(x, y);    }        public Rectangle displayBox() {        return new Rectangle(        fDisplayBox.x,        fDisplayBox.y,        fDisplayBox.width,        fDisplayBox.height);    }        public void basicDisplayBox(Point origin, Point corner) {        fDisplayBox = new Rectangle(origin);        fDisplayBox.add(corner);        layout();    }        private void drawBorder(Graphics g) {        super.draw(g);                Rectangle r = displayBox();                Figure f = figureAt(0);        Rectangle rf = f.displayBox();        g.setColor(Color.gray);        g.drawLine(r.x, r.y+rf.height+2, r.x+r.width, r.y + rf.height+2);        g.setColor(Color.white);        g.drawLine(r.x, r.y+rf.height+3, r.x+r.width, r.y + rf.height+3);                g.setColor(Color.white);        g.drawLine(r.x, r.y, r.x, r.y + r.height);        g.drawLine(r.x, r.y, r.x + r.width, r.y);        g.setColor(Color.gray);        g.drawLine(r.x + r.width, r.y, r.x + r.width, r.y + r.height);        g.drawLine(r.x , r.y + r.height, r.x + r.width, r.y + r.height);    }        public void draw(Graphics g) {        drawBorder(g);        super.draw(g);    }        public Vector handles() {        Vector handles = new Vector();        handles.addElement(new NullHandle(this, RelativeLocator.northWest()));        handles.addElement(new NullHandle(this, RelativeLocator.northEast()));        handles.addElement(new NullHandle(this, RelativeLocator.southWest()));        handles.addElement(new NullHandle(this, RelativeLocator.southEast()));        return addHandles(handles);    }        protected abstract Vector addHandles(Vector handles);        public void initialize() {        fDisplayBox = new Rectangle(0, 0, 0, 0);        Font fb = new Font("Helvetica", Font.BOLD, 12);        TextFigure type = new TextFigure();        type.setFont(fb);        type.setText((String)getParam("type"));        type.setAttribute("TextColor", Color.white);        type.setReadOnly(true);        add(type);        initContent();    }        protected abstract void initContent();        private void layout() {        Point partOrigin = new Point(fDisplayBox.x, fDisplayBox.y);        partOrigin.translate(BORDER, BORDER);        Dimension extent = new Dimension(0, 0);                FigureEnumeration k = figures();        while (k.hasMoreElements()) {            Figure f = k.nextFigure();                        Dimension partExtent = f.size();            Point corner = new Point(            partOrigin.x+partExtent.width,            partOrigin.y+partExtent.height);            f.basicDisplayBox(partOrigin, corner);                        extent.width = Math.max(extent.width, partExtent.width);            extent.height += partExtent.height;            partOrigin.y += partExtent.height;        }        fDisplayBox.width = extent.width + 2*BORDER;        fDisplayBox.height = extent.height + 2*BORDER;    }        private boolean needsLayout() {        Dimension extent = new Dimension(0, 0);                FigureEnumeration k = figures();        while (k.hasMoreElements()) {            Figure f = k.nextFigure();            extent.width = Math.max(extent.width, f.size().width);        }        int newExtent = extent.width + 2*BORDER;        return newExtent != fDisplayBox.width;    }        public void update(FigureChangeEvent e) {        if (needsLayout()) {            layout();            changed();        }    }        public void update() {        FigureEnumeration k = figures();        while (k.hasMoreElements()) {            Figure f = k.nextFigure();            if (f instanceof UpdatableFigure) {                UpdatableFigure uf = (UpdatableFigure)f;                uf.update();            }        }        layout();        changed();    }        public void figureChanged(FigureChangeEvent e) {        update(e);    }            public void figureRemoved(FigureChangeEvent e) {        update(e);    }        public void notifyPostConn() {    }            public void write(StorableOutput dw) {        super.write(dw);        dw.writeInt(fDisplayBox.x);        dw.writeInt(fDisplayBox.y);        dw.writeInt(fDisplayBox.width);        dw.writeInt(fDisplayBox.height);    }            public void read(StorableInput dr) throws IOException {        super.read(dr);        fDisplayBox = new Rectangle(        dr.readInt(),        dr.readInt(),        dr.readInt(),        dr.readInt());        layout();    }        public Insets connectionInsets() {        Rectangle r = fDisplayBox;        int cx = r.width/2;        int cy = r.height/2;        return new Insets(cy, cx, cy, cx);    }            /** Creates the Layer object represented     * @return the Layer created     */    protected Object createLayer() {        Object ly;        String msg;        try {            Class cLayer = Class.forName((String) getParam("class"));            ly = cLayer.newInstance();            return ly;        } catch (ClassNotFoundException cnfe)         {            msg = "ClassNotFoundException  was thrown. Message is : " + cnfe.getMessage();            log.warn ( msg, cnfe);        } catch (InstantiationException ie)         {            msg = "InstantiationException was thrown. Message is : " + ie.getMessage();            log.warn (msg, ie);        } catch (IllegalAccessException iae)         {            msg = "IllegalAccessException was thrown. Message is : " + iae.getMessage();            log.warn ( msg, iae);        }        return null;    }        /** Used to get a parameter by name     * @return the parameter's value     * @param key the parameter's name     */    public Object getParam(Object key) {        return params.get(key);    }            /** Sets a parameter of the layer     * @param key the parameter's name     * @param newParam The parameter's value     */    public void setParam(Object key, Object newParam) {        params.put(key, newParam);    }        /** Used to set all parameters of the layer     * @param newParams java.util.Hashtable     */    public void setParams(java.util.Hashtable newParams) {        params = newParams;    }        /** Returns the wrapper for the Figure     * @return the Wrapper object     */    public abstract Wrapper getWrapper();        public boolean canConnect(GenericFigure start, ConnectionFigure conn) {        return false;    }        /** Get the Layer object     * @return the Layer object     */    public abstract Object getLayer();            /**     * Get the popup menu for this figure.     * Put here all the popup menu items common to all the figures;     * override this method to differentiate the menu items.     * @param ps the property sheet to use in the Properties option.     * @todo is there a better way to set the minimum size?     * @return the popup menu.     */    public JPopupMenu getPopupMenu(final PropertySheet ps, final DrawingView view) {        JPopupMenu jpm = new JPopupMenu();        JMenuItem jmi = new JMenuItem("Properties");        jmi.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                if (ps != null) {                    Wrapper wrap = getWrapper();                    ps.setTarget(wrap);                    ps.pack();                    // Make sure the panel is wide enough to fit the title.                    if (ps.getSize().width < 250) {                        ps.setSize(new Dimension(250, ps.getSize().height));                    }                    ps.show();                }            }        });        jpm.add(jmi);        jmi = new JMenuItem("Delete");        jmi.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                new DeleteCommand("Delete", view).execute();            }        });        jpm.add(jmi);        if (getWrapper().getBean() instanceof Inspectable) {            jmi = new JMenuItem("Inspect");            jmi.addActionListener(new ActionListener() {                public void actionPerformed(ActionEvent e) {                    Inspectable inspectable = (Inspectable) getWrapper().getBean();                    InspectionFrame iFrame = new InspectionFrame(inspectable);                    iFrame.show();                }            });            jpm.add(jmi);        }        return jpm;    }}

⌨️ 快捷键说明

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