📄 knowledgeflowapp.java
字号:
* Stuff relating to user created meta beans
*/
private JToolBar m_userToolBar = null;
private Box m_userBoxPanel = null;
private Vector m_userComponents = new Vector();
private boolean m_firstUserComponentOpp = true;
private JToggleButton m_pointerB;
private JButton m_saveB;
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) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -