customuidemo.java

来自「全面实现ilog地功能,没有使用第三方lib.」· Java 代码 · 共 139 行

JAVA
139
字号
/*
 * This source code is part of TWaver 1.3.1
 *
 * SERVA Software PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * Copyright 2000-2005 SERVA Software, Inc. All rights reserved.
 */

package demo.network.customui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.util.Random;

import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;

import twaver.AlarmSeverity;
import twaver.Element;
import twaver.Link;
import twaver.MovableFilter;
import twaver.Node;
import twaver.TDataBox;
import twaver.TWaverConst;
import twaver.network.TNetwork;
import twaver.network.ui.IconAttachmentHolder;
import twaver.table.TPropertySheet;
import twaver.tree.TTree;
import demo.DemoPane;

public class CustomUIDemo extends DemoPane {
    TDataBox box = new TDataBox();
    TNetwork network = new TNetwork(box);
    TTree tree = new TTree(box);
    TPropertySheet sheet = new TPropertySheet(box);
    Random r = new Random();

    public CustomUIDemo() {
        tree.setElementMakedVisibleOnSelected(true);
        this.sheet.setElementEditable(true);
        JSplitPane leftSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(tree), new JScrollPane(sheet));
        JSplitPane rootSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftSplit, network);
        leftSplit.setDividerLocation(100);
        leftSplit.setContinuousLayout(true);
        rootSplit.setDividerLocation(200);
        rootSplit.setContinuousLayout(true);
        this.add(rootSplit, BorderLayout.CENTER);

        IconAttachmentHolder.addAttachment("Thermometer", ThermometerAttachment.class);
        IconAttachmentHolder.addAttachment("KPI", KPIAttachment.class);

        final Node node1 = new CustomUINode();
        node1.setLocation(80, 80);
        node1.putClientProperty("StateIcon:Thermometer", Boolean.TRUE);
        node1.putClientProperty("StateIcon:KPI", Boolean.TRUE);
        node1.setName("equipment 1");
        node1.setSelected(true);
        network.getDataBox().addElement(node1);

        final Node node2 = new CustomUINode();
        node2.setLocation(250, 300);
        node2.setName("equipment 2");
        box.addElement(node2);

        final Link link = new Link(node1, node2);
        link.putClientProperty(TWaverConst.PROPERTYNAME_LINK_FLOWING_COLOR, Color.RED);
        link.putClientProperty(TWaverConst.PROPERTYNAME_LINK_WIDTH, new Integer(6));
        link.putClientProperty(TWaverConst.PROPERTYNAME_LINK_FLOWING_WIDTH, new Integer(6));
        link.putClientProperty(TWaverConst.PROPERTYNAME_LINK_3D, Boolean.TRUE);
        box.addElement(link);

        this.network.addMovableFilter(new MovableFilter() {
            public boolean isMovable(Element element) {
                if (element == node2) {
                    Boolean state = (Boolean) node2.getClientProperty("equipment.state");
                    if (state != null && state.booleanValue()) {
                        return false;
                    }
                }
                return true;
            }
        });

        Thread thread = new Thread() {
            public void run() {
                while (true) {
                    for (int i = 20; i > 0; i--) {
                    	final int step = i;

                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                // set node1
                                final Integer temperature = new Integer(step);
                                node1.putClientProperty("temperature", temperature);
                                for (int k = 0; k < KPIAttachment.KYES.length; k++) {
                                    double value = r.nextInt(100) / 100.0;
                                    String key = KPIAttachment.KYES[k];
                                    node1.putClientProperty(KPIAttachment.KYES[k], key + ":" + value);
                                }

                                Boolean state = step < 10 ? Boolean.TRUE : Boolean.FALSE;

                                if (state == Boolean.TRUE) {
                                    node1.getAlarmState().increaseNewAlarm(AlarmSeverity.CRITICAL, 1);
                                } else {
                                    node1.getAlarmState().decreaseNewAlarm(AlarmSeverity.CRITICAL, 1);
                                }

                                // set node2
                                node2.putClientProperty("equipment.state", state);
                                node2.putClientProperty("equipment.value", new Integer(step));
                                // set link
                                link.putClientProperty(TWaverConst.PROPERTYNAME_LINK_FLOWING, new Boolean(!state.booleanValue()));

                            }
                        });

                        try {
                            Thread.sleep(200);
                        }
                        catch (InterruptedException ex) {
                        }
                    }
                }
            }
        };
        thread.start();

    }

    public String getHelp() {
        return "This demo customize element UI";
    }

    public String getTitle() {
        return "Element Custom UI";
    }
}

⌨️ 快捷键说明

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