📄 knowledgeflowapp.java
字号:
private JButton m_loadB; private JButton m_stopB; private JButton m_helpB; private JButton m_newB; /** * Reference to bean being manipulated */ private BeanInstance m_editElement; /** * Event set descriptor for the bean being manipulated */ private EventSetDescriptor m_sourceEventSetDescriptor; /** * Used to record screen coordinates during move, select and connect * operations */ private int m_oldX, m_oldY; private int m_startX, m_startY; /** The file chooser for selecting layout files */ protected JFileChooser m_FileChooser = new JFileChooser(new File(System.getProperty("user.dir"))); protected LogPanel m_logPanel = new LogPanel(null, true); protected BeanContextSupport m_bcSupport = new BeanContextSupport(); /** the extension for the serialized setups (Java serialization) */ public final static String FILE_EXTENSION = ".kf"; /** the extension for the serialized setups (Java serialization) */ public final static String FILE_EXTENSION_XML = ".kfml"; /** A filter to ensure only KnowledgeFlow files in binary format get shown in the chooser */ protected FileFilter m_KfFilter = new ExtensionFileFilter(FILE_EXTENSION, "KnowledgeFlow configuration files (*" + FILE_EXTENSION + ")"); /** A filter to ensure only KnowledgeFlow files in KOML format get shown in the chooser */ protected FileFilter m_KOMLFilter = new ExtensionFileFilter(KOML.FILE_EXTENSION, "KnowledgeFlow configuration files (*" + KOML.FILE_EXTENSION + ")"); /** A filter to ensure only KnowledgeFlow layout files in XML format get shown in the chooser */ protected FileFilter m_XMLFilter = new ExtensionFileFilter(FILE_EXTENSION_XML, "KnowledgeFlow layout files (*" + FILE_EXTENSION_XML + ")"); /** the scrollbar increment of the layout scrollpane */ protected int m_ScrollBarIncrementLayout = 20; /** the scrollbar increment of the components scrollpane */ protected int m_ScrollBarIncrementComponents = 50; /** the flow layout width */ protected int m_FlowWidth = 1024; /** the flow layout height */ protected int m_FlowHeight = 768; /** the preferred file extension */ protected String m_PreferredExtension = FILE_EXTENSION; /** whether to store the user components in XML or in binary format */ protected boolean m_UserComponentsInXML = false; /** * Creates a new <code>KnowledgeFlowApp</code> instance. */ public KnowledgeFlowApp() { // Grab a fontmetrics object JWindow temp = new JWindow(); temp.show(); temp.getGraphics().setFont(new Font("Monospaced", Font.PLAIN, 10)); m_fontM = temp.getGraphics().getFontMetrics(); temp.hide(); // some GUI defaults try { m_ScrollBarIncrementLayout = Integer.parseInt( BEAN_PROPERTIES.getProperty( "ScrollBarIncrementLayout", "" + m_ScrollBarIncrementLayout)); m_ScrollBarIncrementComponents = Integer.parseInt( BEAN_PROPERTIES.getProperty( "ScrollBarIncrementComponents", "" + m_ScrollBarIncrementComponents)); m_FlowWidth = Integer.parseInt( BEAN_PROPERTIES.getProperty( "FlowWidth", "" + m_FlowWidth)); m_FlowHeight = Integer.parseInt( BEAN_PROPERTIES.getProperty( "FlowHeight", "" + m_FlowHeight)); m_PreferredExtension = BEAN_PROPERTIES.getProperty( "PreferredExtension", m_PreferredExtension); m_UserComponentsInXML = Boolean.valueOf( BEAN_PROPERTIES.getProperty( "UserComponentsInXML", "" + m_UserComponentsInXML)).booleanValue(); } catch (Exception ex) { ex.printStackTrace(); } // FileChooser m_FileChooser.addChoosableFileFilter(m_KfFilter); if (KOML.isPresent()) { m_FileChooser.addChoosableFileFilter(m_KOMLFilter); } m_FileChooser.addChoosableFileFilter(m_XMLFilter); if (m_PreferredExtension.equals(FILE_EXTENSION_XML)) m_FileChooser.setFileFilter(m_XMLFilter); else if (KOML.isPresent() && m_PreferredExtension.equals(KOML.FILE_EXTENSION)) m_FileChooser.setFileFilter(m_KOMLFilter); else m_FileChooser.setFileFilter(m_KfFilter); m_FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); m_bcSupport.setDesignTime(true); m_beanLayout.setLayout(null); // handle mouse events m_beanLayout.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { if (m_toolBarBean == null) { if (((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) && m_mode == NONE) { BeanInstance bi = BeanInstance.findInstance(me.getPoint()); JComponent bc = null; if (bi != null) { bc = (JComponent)(bi.getBean()); } if (bc != null && (bc instanceof Visible)) { m_editElement = bi; m_oldX = me.getX(); m_oldY = me.getY(); m_mode = MOVING; } if (m_mode != MOVING) { m_mode = SELECTING; m_oldX = me.getX(); m_oldY = me.getY(); m_startX = m_oldX; m_startY = m_oldY; Graphics2D gx = (Graphics2D)m_beanLayout.getGraphics(); gx.setXORMode(java.awt.Color.white); // gx.drawRect(m_oldX, m_oldY, m_oldX, m_oldY); // gx.drawLine(m_startX, m_startY, m_startX, m_startY); gx.dispose(); m_mode = SELECTING; } } } } public void mouseReleased(MouseEvent me) { if (m_editElement != null && m_mode == MOVING) { m_editElement = null; revalidate(); m_beanLayout.repaint(); m_mode = NONE; } if (m_mode == SELECTING) { revalidate(); m_beanLayout.repaint(); m_mode = NONE; checkSubFlow(m_startX, m_startY, me.getX(), me.getY()); } } public void mouseClicked(MouseEvent me) { BeanInstance bi = BeanInstance.findInstance(me.getPoint()); if (m_mode == ADDING || m_mode == NONE) { // try and popup a context sensitive menu if we have // been clicked over a bean. if (bi != null) { JComponent bc = (JComponent)bi.getBean(); if (((me.getModifiers() & InputEvent.BUTTON1_MASK) != InputEvent.BUTTON1_MASK) || me.isAltDown()) { doPopup(me.getPoint(), bi, me.getX(), me.getY()); } } else { if (((me.getModifiers() & InputEvent.BUTTON1_MASK) != InputEvent.BUTTON1_MASK) || me.isAltDown()) { // find connections if any close to this point int delta = 10; deleteConnectionPopup(BeanConnection. getClosestConnections(new Point(me.getX(), me.getY()), delta), me.getX(), me.getY()); } else if (m_toolBarBean != null) { // otherwise, if a toolbar button is active then // add the component addComponent(me.getX(), me.getY()); } } } if (m_mode == CONNECTING) { // turn off connecting points and remove connecting line m_beanLayout.repaint(); Vector beanInstances = BeanInstance.getBeanInstances(); for (int i = 0; i < beanInstances.size(); i++) { JComponent bean = (JComponent)((BeanInstance)beanInstances.elementAt(i)). getBean(); if (bean instanceof Visible) { ((Visible)bean).getVisual().setDisplayConnectors(false); } } if (bi != null) { boolean doConnection = false; if (!(bi.getBean() instanceof BeanCommon)) { doConnection = true; } else { // Give the target bean a chance to veto the proposed // connection if (((BeanCommon)bi.getBean()). connectionAllowed(m_sourceEventSetDescriptor)) { doConnection = true; } } if (doConnection) { // attempt to connect source and target beans if (bi.getBean() instanceof MetaBean) { BeanConnection.doMetaConnection(m_editElement, bi, m_sourceEventSetDescriptor, m_beanLayout); } else { BeanConnection bc = new BeanConnection(m_editElement, bi, m_sourceEventSetDescriptor); } } m_beanLayout.repaint(); } m_mode = NONE; m_editElement = null; m_sourceEventSetDescriptor = null; } } }); m_beanLayout.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent me) { if (m_editElement != null && m_mode == MOVING) { ImageIcon ic = ((Visible)m_editElement.getBean()). getVisual().getStaticIcon(); int width = ic.getIconWidth() / 2; int height = ic.getIconHeight() / 2; /* m_editElement.setX(m_oldX-width); m_editElement.setY(m_oldY-height); */ m_editElement.setXY(m_oldX-width, m_oldY-height); m_beanLayout.repaint(); // note the new points m_oldX = me.getX(); m_oldY = me.getY(); } if (m_mode == SELECTING) { m_beanLayout.repaint(); m_oldX = me.getX(); m_oldY = me.getY(); } } public void mouseMoved(MouseEvent e) { if (m_mode == CONNECTING) { m_beanLayout.repaint(); // note the new coordinates m_oldX = e.getX(); m_oldY = e.getY(); } } }); String date = (new SimpleDateFormat("EEEE, d MMMM yyyy")) .format(new Date()); m_logPanel.logMessage("Weka Knowledge Flow was written by Mark Hall"); m_logPanel.logMessage("Weka Knowledge Flow"); m_logPanel.logMessage("(c) 2002-2005 Mark Hall"); m_logPanel.logMessage("web: http://www.cs.waikato.ac.nz/~ml/"); m_logPanel.logMessage( date); m_logPanel.statusMessage("Welcome to the Weka Knowledge Flow"); JPanel p1 = new JPanel(); p1.setLayout(new BorderLayout()); p1.setBorder(javax.swing.BorderFactory.createCompoundBorder( javax.swing.BorderFactory. createTitledBorder("Knowledge Flow Layout"), javax.swing.BorderFactory.createEmptyBorder(0, 5, 5, 5) )); final JScrollPane js = new JScrollPane(m_beanLayout); p1.add(js, BorderLayout.CENTER); js.getVerticalScrollBar().setUnitIncrement(m_ScrollBarIncrementLayout); js.getHorizontalScrollBar().setUnitIncrement(m_ScrollBarIncrementLayout); setLayout(new BorderLayout()); add(p1, BorderLayout.CENTER); m_beanLayout.setSize(m_FlowWidth, m_FlowHeight); Dimension d = m_beanLayout.getPreferredSize(); m_beanLayout.setMinimumSize(d); m_beanLayout.setMaximumSize(d); m_beanLayout.setPreferredSize(d); add(m_logPanel, BorderLayout.SOUTH); setUpToolBars(); loadUserComponents(); } private Image loadImage(String path) { Image pic = null; java.net.URL imageURL = ClassLoader.getSystemResource(path); if (imageURL == null) { // System.err.println("Warning: unable to load "+path); } else { pic = Toolkit.getDefaultToolkit(). getImage(imageURL); } return pic; } /** * Describe <code>setUpToolBars</code> method here. */ private void setUpToolBars() { JPanel toolBarPanel = new JPanel(); toolBarPanel.setLayout(new BorderLayout()); // first construct the toolbar for saving, loading etc JToolBar fixedTools = new JToolBar(); fixedTools.setOrientation(JToolBar.VERTICAL); m_saveB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +"Save24.gif"))); m_saveB.setToolTipText("Save layout"); m_loadB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +"Open24.gif"))); m_stopB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +"Stop24.gif"))); m_helpB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +"Help24.gif"))); m_newB = new JButton(new ImageIcon(loadImage(BeanVisual.ICON_PATH +"New24.gif"))); m_stopB.setToolTipText("Stop all execution"); m_loadB.setToolTipText("Load layout"); m_helpB.setToolTipText("Display help"); m_newB.setToolTipText("Clear the layout"); Image tempI = loadImage(BeanVisual.ICON_PATH+"Pointer.gif"); m_pointerB = new JToggleButton(new ImageIcon(tempI)); m_pointerB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { m_toolBarBean = null; m_mode = NONE; setCursor(Cursor. getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } }); m_toolBarGroup.add(m_pointerB); fixedTools.add(m_newB); fixedTools.add(m_saveB); fixedTools.add(m_loadB); Dimension dP = m_saveB.getPreferredSize(); Dimension dM = m_saveB.getMaximumSize(); fixedTools.setFloatable(false); m_pointerB.setPreferredSize(dP); m_pointerB.setMaximumSize(dM); toolBarPanel.add(fixedTools, BorderLayout.WEST);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -