All Downloads are FREE. Search and download functionalities are using the official Maven repository.

weka.gui.Main Maven / Gradle / Ivy

Go to download

The Waikato Environment for Knowledge Analysis (WEKA), a machine learning workbench. This is the stable version. Apart from bugfixes, this version does not receive any other updates.

There is a newer version: 3.8.6
Show newest version
/*
 *    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.
 */

/*
 * Main.java
 * Copyright (C) 2006 University of Waikato, Hamilton, New Zealand
 *
 */

package weka.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.Reader;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
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.JSeparator;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;

import weka.classifiers.bayes.net.GUI;
import weka.classifiers.evaluation.ThresholdCurve;
import weka.core.Copyright;
import weka.core.Instances;
import weka.core.Memory;
import weka.core.Option;
import weka.core.OptionHandler;
import weka.core.SelectedTag;
import weka.core.SystemInfo;
import weka.core.Tag;
import weka.core.Utils;
import weka.core.Version;
import weka.gui.arffviewer.ArffViewerMainPanel;
import weka.gui.beans.KnowledgeFlowApp;
import weka.gui.beans.StartUpListener;
import weka.gui.boundaryvisualizer.BoundaryVisualizer;
import weka.gui.experiment.Experimenter;
import weka.gui.explorer.Explorer;
import weka.gui.graphvisualizer.GraphVisualizer;
import weka.gui.sql.SqlViewer;
import weka.gui.treevisualizer.Node;
import weka.gui.treevisualizer.NodePlace;
import weka.gui.treevisualizer.PlaceNode2;
import weka.gui.treevisualizer.TreeBuild;
import weka.gui.treevisualizer.TreeVisualizer;
import weka.gui.visualize.PlotData2D;
import weka.gui.visualize.ThresholdVisualizePanel;
import weka.gui.visualize.VisualizePanel;

/**
 * Menu-based GUI for Weka, replacement for the GUIChooser.
 * 
 *  Valid options are:
 * 

* *

 * -gui <MDI|SDI>
 *  Determines the layout of the GUI:
 *  MDI = MDI Layout
 *  SDI = SDI Layout
 *  (default: MDI)
 * 
* * * * @author fracpete (fracpete at waikato dot ac dot nz) * @version $Revision: 10438 $ */ public class Main extends JFrame implements OptionHandler { /** for serialization. */ private static final long serialVersionUID = 1453813254824253849L; /** * DesktopPane with background image. * * @author fracpete (fracpete at waikato dot ac dot nz) * @version $Revision: 10438 $ */ public static class BackgroundDesktopPane extends JDesktopPane { /** for serialization. */ private static final long serialVersionUID = 2046713123452402745L; /** the actual background image. */ protected Image m_Background; /** * intializes the desktop pane. * * @param image the image to use as background */ public BackgroundDesktopPane(String image) { super(); try { m_Background = Toolkit.getDefaultToolkit().getImage( ClassLoader.getSystemResource(image)); } catch (Exception e) { e.printStackTrace(); } } /** * draws the background image. * * @param g the graphics context */ @Override public void paintComponent(Graphics g) { super.paintComponent(g); if (m_Background != null) { g.setColor(Color.WHITE); g.clearRect(0, 0, getWidth(), getHeight()); int width = m_Background.getWidth(null); int height = m_Background.getHeight(null); int x = (getWidth() - width) / 2; int y = (getHeight() - height) / 2; g.drawImage(m_Background, x, y, width, height, this); } } } /** * Specialized JFrame class. * * @author fracpete (fracpete at waikato dot ac dot nz) * @version $Revision: 10438 $ */ public static class ChildFrameSDI extends JFrame { /** for serialization. */ private static final long serialVersionUID = 8588293938686425618L; /** the parent frame. */ protected Main m_Parent; /** * constructs a new internal frame that knows about its parent. * * @param parent the parent frame * @param title the title of the frame */ public ChildFrameSDI(Main parent, String title) { super(title); m_Parent = parent; addWindowListener(new WindowAdapter() { @Override public void windowActivated(WindowEvent e) { // update title of parent if (getParentFrame() != null) { getParentFrame().createTitle(getTitle()); } } }); // add to parent if (getParentFrame() != null) { getParentFrame().addChildFrame(this); setIconImage(getParentFrame().getIconImage()); } } /** * returns the parent frame, can be null. * * @return the parent frame */ public Main getParentFrame() { return m_Parent; } /** * de-registers the child frame with the parent first. */ @Override public void dispose() { if (getParentFrame() != null) { getParentFrame().removeChildFrame(this); getParentFrame().createTitle(""); } super.dispose(); } } /** * Specialized JInternalFrame class. * * @author fracpete (fracpete at waikato dot ac dot nz) * @version $Revision: 10438 $ */ public static class ChildFrameMDI extends JInternalFrame { /** for serialization. */ private static final long serialVersionUID = 3772573515346899959L; /** the parent frame. */ protected Main m_Parent; /** * constructs a new internal frame that knows about its parent. * * @param parent the parent frame * @param title the title of the frame */ public ChildFrameMDI(Main parent, String title) { super(title, true, true, true, true); m_Parent = parent; addInternalFrameListener(new InternalFrameAdapter() { @Override public void internalFrameActivated(InternalFrameEvent e) { // update title of parent if (getParentFrame() != null) { getParentFrame().createTitle(getTitle()); } } }); // add to parent if (getParentFrame() != null) { getParentFrame().addChildFrame(this); getParentFrame().jDesktopPane.add(this); } } /** * returns the parent frame, can be null. * * @return the parent frame */ public Main getParentFrame() { return m_Parent; } /** * de-registers the child frame with the parent first. */ @Override public void dispose() { if (getParentFrame() != null) { getParentFrame().removeChildFrame(this); getParentFrame().createTitle(""); } super.dispose(); } } /** displays the GUI as MDI. */ public final static int GUI_MDI = 0; /** displays the GUI as SDI. */ public final static int GUI_SDI = 1; /** GUI tags. */ public static final Tag[] TAGS_GUI = { new Tag(GUI_MDI, "MDI", Messages.getInstance().getString( "Main_Tag_GUI_Text_First")), new Tag(GUI_SDI, "SDI", Messages.getInstance().getString( "Main_Tag_GUI_Text_Second")) }; /** the frame itself. */ protected Main m_Self; /** the type of GUI to display. */ protected int m_GUIType = GUI_MDI; /** * variable for the Main class which would be set to null by the memory * monitoring thread to free up some memory if we running out of memory. */ protected static Main m_MainCommandline; /** singleton instance of the GUI. */ protected static Main m_MainSingleton; /** * list of things to be notified when the startup process of the KnowledgeFlow * is complete. */ protected static Vector m_StartupListeners = new Vector(); /** for monitoring the Memory consumption. */ protected static Memory m_Memory = new Memory(true); /** contains the child frames (title <-> object). */ protected HashSet m_ChildFrames = new HashSet(); /** The frame of the LogWindow. */ protected static LogWindow m_LogWindow = new LogWindow(); /** filechooser for the TreeVisualizer. */ protected JFileChooser m_FileChooserTreeVisualizer = new JFileChooser( new File(System.getProperty("user.dir"))); /** filechooser for the GraphVisualizer. */ protected JFileChooser m_FileChooserGraphVisualizer = new JFileChooser( new File(System.getProperty("user.dir"))); /** filechooser for Plots. */ protected JFileChooser m_FileChooserPlot = new JFileChooser(new File( System.getProperty("user.dir"))); /** filechooser for ROC curves. */ protected JFileChooser m_FileChooserROC = new JFileChooser(new File( System.getProperty("user.dir"))); // GUI components private JMenu jMenuHelp; private JMenu jMenuVisualization; private JMenu jMenuTools; private JDesktopPane jDesktopPane; private JMenu jMenuApplications; private JMenuItem jMenuItemHelpSystemInfo; private JMenuItem jMenuItemHelpAbout; private JMenuItem jMenuItemHelpHomepage; private JMenuItem jMenuItemHelpWekaWiki; private JMenuItem jMenuItemHelpSourceforge; private JMenuItem jMenuItemVisualizationBoundaryVisualizer; private JMenuItem jMenuItemVisualizationGraphVisualizer; private JMenuItem jMenuItemVisualizationTreeVisualizer; private JMenuItem jMenuItemVisualizationROC; private JMenuItem jMenuItemVisualizationPlot; private JMenuItem jMenuItemToolsSqlViewer; private JMenuItem jMenuItemToolsArffViewer; private JMenuItem jMenuItemApplicationsSimpleCLI; private JMenuItem jMenuItemApplicationsKnowledgeFlow; private JMenuItem jMenuItemApplicationsExperimenter; private JMenuItem jMenuItemApplicationsExplorer; private JMenuItem jMenuItemProgramExit; private JMenuItem jMenuItemProgramLogWindow; private JMenuItem jMenuItemProgramMemoryUsage; private JMenu jMenuProgram; private JMenu jMenuExtensions; private JMenu jMenuWindows; private JMenuBar jMenuBar; /** * default constructor. */ public Main() { super(); } /** * creates a frame (depending on m_GUIType) and returns it. * * @param parent the parent of the generated frame * @param title the title of the frame * @param c the component to place, can be null * @param layout the layout to use, e.g., BorderLayout * @param layoutConstraints the layout constraints, e.g., BorderLayout.CENTER * @param width the width of the frame, ignored if -1 * @param height the height of the frame, ignored if -1 * @param menu an optional menu * @param listener if true a default listener is added * @param visible if true then the frame is made visible immediately * @return the generated frame * @see #m_GUIType */ protected Container createFrame(Main parent, String title, Component c, LayoutManager layout, Object layoutConstraints, int width, int height, JMenuBar menu, boolean listener, boolean visible) { Container result = null; if (m_GUIType == GUI_MDI) { final ChildFrameMDI frame = new ChildFrameMDI(parent, title); // layout frame.setLayout(layout); if (c != null) { frame.getContentPane().add(c, layoutConstraints); } // menu frame.setJMenuBar(menu); // size frame.pack(); if ((width > -1) && (height > -1)) { frame.setSize(width, height); } frame.validate(); // listener? if (listener) { frame.addInternalFrameListener(new InternalFrameAdapter() { @Override public void internalFrameClosing(InternalFrameEvent e) { frame.dispose(); } }); } // display frame if (visible) { frame.setVisible(true); try { frame.setSelected(true); } catch (Exception e) { e.printStackTrace(); } } result = frame; } else if (m_GUIType == GUI_SDI) { final ChildFrameSDI frame = new ChildFrameSDI(parent, title); // layout frame.setLayout(layout); if (c != null) { frame.getContentPane().add(c, layoutConstraints); } // menu frame.setJMenuBar(menu); // size frame.pack(); if ((width > -1) && (height > -1)) { frame.setSize(width, height); } frame.validate(); // location int screenHeight = getGraphicsConfiguration().getBounds().height; int screenWidth = getGraphicsConfiguration().getBounds().width; frame.setLocation((screenWidth - frame.getBounds().width) / 2, (screenHeight - frame.getBounds().height) / 2); // listener? if (listener) { frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { frame.dispose(); } }); } // display frame if (visible) { frame.setVisible(true); } result = frame; } return result; } /** * insert the menu item in a sorted fashion. * * @param menu the menu to add the item to * @param menuitem the menu item to add */ protected void insertMenuItem(JMenu menu, JMenuItem menuitem) { insertMenuItem(menu, menuitem, 0); } /** * insert the menu item in a sorted fashion. * * @param menu the menu to add the item to * @param menuitem the menu item to add * @param startIndex the index in the menu to start with (0-based) */ protected void insertMenuItem(JMenu menu, JMenuItem menuitem, int startIndex) { boolean inserted; int i; JMenuItem current; String currentStr; String newStr; inserted = false; newStr = menuitem.getText().toLowerCase(); // try to find a spot inbetween for (i = startIndex; i < menu.getMenuComponentCount(); i++) { if (!(menu.getMenuComponent(i) instanceof JMenuItem)) { continue; } current = (JMenuItem) menu.getMenuComponent(i); currentStr = current.getText().toLowerCase(); if (currentStr.compareTo(newStr) > 0) { inserted = true; menu.insert(menuitem, i); break; } } // add it at the end if not yet inserted if (!inserted) { menu.add(menuitem); } } /** * initializes the GUI. */ protected void initGUI() { m_Self = this; try { // main window createTitle(""); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setIconImage(new ImageIcon(getClass().getClassLoader().getResource( "weka/gui/weka_icon_new_48.png")).getImage()); // bits and pieces m_FileChooserGraphVisualizer .addChoosableFileFilter(new ExtensionFileFilter(".bif", Messages .getInstance().getString( "Main_InitGUI_ExtensionFileFilter_Text_First"))); m_FileChooserGraphVisualizer .addChoosableFileFilter(new ExtensionFileFilter(".xml", Messages .getInstance().getString( "Main_InitGUI_ExtensionFileFilter_Text_Second"))); m_FileChooserPlot.addChoosableFileFilter(new ExtensionFileFilter( Instances.FILE_EXTENSION, Messages.getInstance().getString( "Main_InitGUI_ExtensionFileFilter_Text_Third") + Instances.FILE_EXTENSION + ")")); m_FileChooserPlot.setMultiSelectionEnabled(true); m_FileChooserROC.addChoosableFileFilter(new ExtensionFileFilter( Instances.FILE_EXTENSION, Messages.getInstance().getString( "Main_InitGUI_ExtensionFileFilter_Text_Third") + Instances.FILE_EXTENSION + ")")); // Desktop if (m_GUIType == GUI_MDI) { jDesktopPane = new BackgroundDesktopPane( "weka/gui/images/weka_background.gif"); jDesktopPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); setContentPane(jDesktopPane); } else { jDesktopPane = null; } // Menu jMenuBar = new JMenuBar(); setJMenuBar(jMenuBar); // Program jMenuProgram = new JMenu(); jMenuBar.add(jMenuProgram); jMenuProgram.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuProgram_SetText_Text")); jMenuProgram.setMnemonic('P'); // Program/Preferences // TODO: read all properties from all props file and display them /* * jMenuItemProgramPreferences = new JMenuItem(); * jMenuProgram.add(jMenuItemProgramPreferences); * jMenuItemProgramPreferences.setText("Preferences"); * jMenuItemProgramPreferences.setMnemonic('P'); * jMenuItemProgramPreferences.addActionListener(new ActionListener() { * public void actionPerformed(ActionEvent evt) { * System.out.println("jMenuItemProgramPreferences.actionPerformed, event=" * +evt); //TODO add your code for * jMenuItemProgramPreferences.actionPerformed } }); */ // Program/LogWindow jMenuItemProgramLogWindow = new JMenuItem(); jMenuProgram.add(jMenuItemProgramLogWindow); jMenuItemProgramLogWindow.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemProgramLogWindow_SetText_Text")); jMenuItemProgramLogWindow.setMnemonic('L'); jMenuItemProgramLogWindow.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { m_LogWindow.setVisible(true); } }); jMenuItemProgramMemoryUsage = new JMenuItem(); jMenuProgram.add(jMenuItemProgramMemoryUsage); jMenuItemProgramMemoryUsage.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemProgramMemoryUsage_SetText_Text")); jMenuItemProgramMemoryUsage.setMnemonic('M'); jMenuItemProgramMemoryUsage.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemProgramMemoryUsage.getText(); if (!containsWindow(title)) { final MemoryUsagePanel panel = new MemoryUsagePanel(); Container c = createFrame(m_Self, title, panel, new BorderLayout(), BorderLayout.CENTER, 400, 50, null, true, true); // optimize size Dimension size = c.getPreferredSize(); c.setSize(new Dimension((int) size.getWidth(), (int) size .getHeight())); // stop threads if (m_GUIType == GUI_MDI) { final ChildFrameMDI frame = (ChildFrameMDI) c; Point l = panel.getFrameLocation(); if ((l.x != -1) && (l.y != -1)) { frame.setLocation(l); } frame.addInternalFrameListener(new InternalFrameAdapter() { @Override public void internalFrameClosing(InternalFrameEvent e) { panel.stopMonitoring(); } }); } else { final ChildFrameSDI frame = (ChildFrameSDI) c; Point l = panel.getFrameLocation(); if ((l.x != -1) && (l.y != -1)) { frame.setLocation(l); } frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { panel.stopMonitoring(); } }); } } else { showWindow(getWindow(title)); } } }); jMenuProgram.add(new JSeparator()); // Program/Exit jMenuItemProgramExit = new JMenuItem(); jMenuProgram.add(jMenuItemProgramExit); jMenuItemProgramExit.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemProgramExit_SetText_Text")); jMenuItemProgramExit.setMnemonic('E'); jMenuItemProgramExit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { // close all children Iterator iter = getWindowList(); Vector list = new Vector(); while (iter.hasNext()) { list.add((Container) iter.next()); } for (int i = 0; i < list.size(); i++) { Container c = list.get(i); if (c instanceof ChildFrameMDI) { ((ChildFrameMDI) c).dispose(); } else if (c instanceof ChildFrameSDI) { ((ChildFrameSDI) c).dispose(); } } // close logwindow m_LogWindow.dispose(); // close main window m_Self.dispose(); // make sure we stop System.exit(0); } }); // Applications jMenuApplications = new JMenu(); jMenuBar.add(jMenuApplications); jMenuApplications.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuApplications_SetText_Text")); jMenuApplications.setMnemonic('A'); // Applications/Explorer jMenuItemApplicationsExplorer = new JMenuItem(); jMenuApplications.add(jMenuItemApplicationsExplorer); jMenuItemApplicationsExplorer.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemApplicationsExplorer_SetText_Text")); jMenuItemApplicationsExplorer.setMnemonic('E'); jMenuItemApplicationsExplorer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemApplicationsExplorer.getText(); if (!containsWindow(title)) { createFrame(m_Self, title, new Explorer(), new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } else { showWindow(getWindow(title)); } } }); // Applications/Experimenter jMenuItemApplicationsExperimenter = new JMenuItem(); jMenuApplications.add(jMenuItemApplicationsExperimenter); jMenuItemApplicationsExperimenter.setText(Messages.getInstance() .getString( "Main_InitGUI_JMenuItemApplicationsExperimenter_SetText_Text")); jMenuItemApplicationsExperimenter.setMnemonic('X'); jMenuItemApplicationsExperimenter.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemApplicationsExperimenter.getText(); if (!containsWindow(title)) { createFrame(m_Self, title, new Experimenter(false), new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } else { showWindow(getWindow(title)); } } }); // Applications/KnowledgeFlow jMenuItemApplicationsKnowledgeFlow = new JMenuItem(); jMenuApplications.add(jMenuItemApplicationsKnowledgeFlow); jMenuItemApplicationsKnowledgeFlow.setText(Messages.getInstance() .getString( "Main_InitGUI_JMenuItemApplicationsKnowledgeFlow_SetText_Text")); jMenuItemApplicationsKnowledgeFlow.setMnemonic('K'); jMenuItemApplicationsKnowledgeFlow .addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemApplicationsKnowledgeFlow.getText(); if (!containsWindow(title)) { KnowledgeFlowApp.createSingleton(new String[0]); createFrame(m_Self, title, KnowledgeFlowApp.getSingleton(), new BorderLayout(), BorderLayout.CENTER, 900, 600, null, true, true); } else { showWindow(getWindow(title)); } } }); // Applications/SimpleCLI jMenuItemApplicationsSimpleCLI = new JMenuItem(); jMenuApplications.add(jMenuItemApplicationsSimpleCLI); jMenuItemApplicationsSimpleCLI.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemApplicationsSimpleCLI_SetText_Text")); jMenuItemApplicationsSimpleCLI.setMnemonic('S'); jMenuItemApplicationsSimpleCLI.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemApplicationsSimpleCLI.getText(); if (!containsWindow(title)) { try { createFrame(m_Self, title, new SimpleCLIPanel(), new BorderLayout(), BorderLayout.CENTER, 600, 500, null, true, true); } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog( m_Self, Messages.getInstance().getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text") + e.getMessage()); return; } } else { showWindow(getWindow(title)); } } }); // Tools jMenuTools = new JMenu(); jMenuBar.add(jMenuTools); jMenuTools.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuTools_JMenu_SetText_Text")); // "" jMenuTools.setMnemonic('T'); // Tools/ArffViewer jMenuItemToolsArffViewer = new JMenuItem(); jMenuTools.add(jMenuItemToolsArffViewer); jMenuItemToolsArffViewer.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemToolsArffViewer_SetText_Text")); jMenuItemToolsArffViewer.setMnemonic('A'); jMenuItemToolsArffViewer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemToolsArffViewer.getText(); if (!containsWindow(title)) { ArffViewerMainPanel panel = new ArffViewerMainPanel(null); panel.setConfirmExit(false); Container frame = createFrame(m_Self, title, panel, new BorderLayout(), BorderLayout.CENTER, 800, 600, panel.getMenu(), true, true); panel.setParent(frame); } else { showWindow(getWindow(title)); } } }); // Tools/SqlViewer jMenuItemToolsSqlViewer = new JMenuItem(); jMenuTools.add(jMenuItemToolsSqlViewer); jMenuItemToolsSqlViewer.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemToolsSqlViewer_SetText_Text")); // "SqlViewer" jMenuItemToolsSqlViewer.setMnemonic('S'); jMenuItemToolsSqlViewer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemToolsSqlViewer.getText(); if (!containsWindow(title)) { final SqlViewer sql = new SqlViewer(null); final Container frame = createFrame(m_Self, title, sql, new BorderLayout(), BorderLayout.CENTER, -1, -1, null, false, true); // custom listener if (frame instanceof ChildFrameMDI) { ((ChildFrameMDI) frame) .addInternalFrameListener(new InternalFrameAdapter() { @Override public void internalFrameClosing(InternalFrameEvent e) { sql.saveSize(); ((ChildFrameMDI) frame).dispose(); } }); } else if (frame instanceof ChildFrameSDI) { ((ChildFrameSDI) frame).addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { sql.saveSize(); ((ChildFrameSDI) frame).dispose(); } }); } } else { showWindow(getWindow(title)); } } }); // Tools/Bayes net editor // Tools/Bayes net editor final JMenuItem jMenuItemBayesNet = new JMenuItem(); jMenuTools.add(jMenuItemBayesNet); jMenuItemBayesNet.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemBayesNet_SetText_Text")); jMenuItemBayesNet.setMnemonic('N'); jMenuItemBayesNet.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String title = jMenuItemBayesNet.getText(); if (!containsWindow(title)) { final GUI bayesNetGUI = new GUI(); final Container frame = createFrame(m_Self, title, bayesNetGUI, new BorderLayout(), BorderLayout.CENTER, 800, 600, bayesNetGUI.getMenuBar(), false, true); } else { showWindow(getWindow(title)); } } }); // Tools/EnsembleLibrary /* * currently disabled due to bugs... FracPete * jMenuItemToolsEnsembleLibrary = new JMenuItem(); * jMenuTools.add(jMenuItemToolsEnsembleLibrary); * jMenuItemToolsEnsembleLibrary.setText("EnsembleLibrary"); * jMenuItemToolsEnsembleLibrary.setMnemonic('E'); * jMenuItemToolsEnsembleLibrary.addActionListener(new ActionListener() { * public void actionPerformed(ActionEvent evt) { String title = * jMenuItemToolsEnsembleLibrary.getText(); if (!containsWindow(title)) { * EnsembleLibrary value = new EnsembleLibrary(); EnsembleLibraryEditor * libraryEditor = new EnsembleLibraryEditor(); * libraryEditor.setValue(value); createFrame( m_Self, title, * libraryEditor.getCustomEditor(), new BorderLayout(), * BorderLayout.CENTER, 800, 600, null, true, true); } else { * showWindow(getWindow(title)); } } }); */ // Visualization jMenuVisualization = new JMenu(); jMenuBar.add(jMenuVisualization); jMenuVisualization.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuVisualization_SetText_Text")); jMenuVisualization.setMnemonic('V'); // Visualization/Plot jMenuItemVisualizationPlot = new JMenuItem(); jMenuVisualization.add(jMenuItemVisualizationPlot); jMenuItemVisualizationPlot.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemVisualizationPlot_SetText_Text")); jMenuItemVisualizationPlot.setMnemonic('P'); jMenuItemVisualizationPlot.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { // choose file int retVal = m_FileChooserPlot.showOpenDialog(m_Self); if (retVal != JFileChooser.APPROVE_OPTION) { return; } // build plot VisualizePanel panel = new VisualizePanel(); String filenames = ""; File[] files = m_FileChooserPlot.getSelectedFiles(); for (int j = 0; j < files.length; j++) { String filename = files[j].getAbsolutePath(); if (j > 0) { filenames += ", "; } filenames += filename; System.err.println(Messages.getInstance().getString( "Main_InitGUI_Error_Text") + filename); try { Reader r = new java.io.BufferedReader(new FileReader(filename)); Instances i = new Instances(r); i.setClassIndex(i.numAttributes() - 1); PlotData2D pd1 = new PlotData2D(i); if (j == 0) { pd1.setPlotName(Messages.getInstance().getString( "Main_InitGUI_Pd1_SetPlotName_Text_First")); panel.setMasterPlot(pd1); } else { pd1.setPlotName(Messages.getInstance().getString( "Main_InitGUI_Pd1_SetPlotName_Text_Second") + (j + 1)); pd1.m_useCustomColour = true; pd1.m_customColour = (j % 2 == 0) ? Color.red : Color.blue; panel.addPlot(pd1); } } catch (Exception e) { e.printStackTrace(); JOptionPane .showMessageDialog( m_Self, Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_First") + files[j] + Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Second") + e.getMessage()); return; } } // create frame createFrame(m_Self, jMenuItemVisualizationPlot.getText() + " - " + filenames, panel, new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } }); // Visualization/ROC // based on this Wiki article: // http://weka.sourceforge.net/wiki/index.php/Visualizing_ROC_curve jMenuItemVisualizationROC = new JMenuItem(); jMenuVisualization.add(jMenuItemVisualizationROC); jMenuItemVisualizationROC.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemVisualizationROC_SetText_Text")); jMenuItemVisualizationROC.setMnemonic('R'); jMenuItemVisualizationROC.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { // choose file int retVal = m_FileChooserROC.showOpenDialog(m_Self); if (retVal != JFileChooser.APPROVE_OPTION) { return; } // create plot String filename = m_FileChooserROC.getSelectedFile() .getAbsolutePath(); Instances result = null; try { result = new Instances(new BufferedReader(new FileReader(filename))); } catch (Exception e) { e.printStackTrace(); JOptionPane .showMessageDialog( m_Self, Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Third") + filename + Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Fourth") + e.getMessage()); return; } result.setClassIndex(result.numAttributes() - 1); ThresholdVisualizePanel vmc = new ThresholdVisualizePanel(); vmc.setROCString(Messages.getInstance().getString( "Main_InitGUI_Vmc_SetROCString_Text") + Utils.doubleToString(ThresholdCurve.getROCArea(result), 4) + ")"); vmc.setName(result.relationName()); PlotData2D tempd = new PlotData2D(result); tempd.setPlotName(result.relationName()); tempd.addInstanceNumberAttribute(); try { vmc.addPlot(tempd); } catch (Exception e) { e.printStackTrace(); JOptionPane .showMessageDialog( m_Self, Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Fifth") + e.getMessage()); return; } createFrame(m_Self, jMenuItemVisualizationROC.getText() + " - " + filename, vmc, new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } }); // Visualization/TreeVisualizer jMenuItemVisualizationTreeVisualizer = new JMenuItem(); jMenuVisualization.add(jMenuItemVisualizationTreeVisualizer); jMenuItemVisualizationTreeVisualizer.setText(Messages.getInstance() .getString( "Main_InitGUI_JMenuItemVisualizationTreeVisualizer_SetText_Text")); jMenuItemVisualizationTreeVisualizer.setMnemonic('T'); jMenuItemVisualizationTreeVisualizer .addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { // choose file int retVal = m_FileChooserTreeVisualizer.showOpenDialog(m_Self); if (retVal != JFileChooser.APPROVE_OPTION) { return; } // build tree String filename = m_FileChooserTreeVisualizer.getSelectedFile() .getAbsolutePath(); TreeBuild builder = new TreeBuild(); Node top = null; NodePlace arrange = new PlaceNode2(); try { top = builder.create(new FileReader(filename)); } catch (Exception e) { e.printStackTrace(); JOptionPane .showMessageDialog( m_Self, Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Sixth") + filename + Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Seventh") + e.getMessage()); return; } // create frame createFrame(m_Self, jMenuItemVisualizationTreeVisualizer.getText() + " - " + filename, new TreeVisualizer(null, top, arrange), new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } }); // Visualization/GraphVisualizer jMenuItemVisualizationGraphVisualizer = new JMenuItem(); jMenuVisualization.add(jMenuItemVisualizationGraphVisualizer); jMenuItemVisualizationGraphVisualizer.setText(Messages.getInstance() .getString( "Main_InitGUI_JMenuItemVisualizationGraphVisualizer_SetText_Text")); jMenuItemVisualizationGraphVisualizer.setMnemonic('G'); jMenuItemVisualizationGraphVisualizer .addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { // choose file int retVal = m_FileChooserGraphVisualizer.showOpenDialog(m_Self); if (retVal != JFileChooser.APPROVE_OPTION) { return; } // build graph String filename = m_FileChooserGraphVisualizer.getSelectedFile() .getAbsolutePath(); GraphVisualizer panel = new GraphVisualizer(); try { if (filename.toLowerCase().endsWith(".xml") || filename.toLowerCase().endsWith(".bif")) { panel.readBIF(new FileInputStream(filename)); } else { panel.readDOT(new FileReader(filename)); } } catch (Exception e) { e.printStackTrace(); JOptionPane .showMessageDialog( m_Self, Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_Eighth") + filename + Messages .getInstance() .getString( "Main_InitGUI_Exception_JOptionPaneShowMessageDialog_Text_nineth") + e.getMessage()); return; } // create frame createFrame(m_Self, jMenuItemVisualizationGraphVisualizer.getText() + " - " + filename, panel, new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } }); // Visualization/BoundaryVisualizer jMenuItemVisualizationBoundaryVisualizer = new JMenuItem(); jMenuVisualization.add(jMenuItemVisualizationBoundaryVisualizer); jMenuItemVisualizationBoundaryVisualizer .setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemVisualizationBoundaryVisualizer_SetText_Text")); jMenuItemVisualizationBoundaryVisualizer.setMnemonic('B'); jMenuItemVisualizationBoundaryVisualizer .addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemVisualizationBoundaryVisualizer.getText(); if (!containsWindow(title)) { createFrame(m_Self, title, new BoundaryVisualizer(), new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); // dont' do a System.exit after last window got closed! BoundaryVisualizer.setExitIfNoWindowsOpen(false); } else { showWindow(getWindow(title)); } } }); // Extensions jMenuExtensions = new JMenu(Messages.getInstance().getString( "Main_InitGUI_JMenuExtensions_JMenu_Text")); jMenuExtensions.setMnemonic(java.awt.event.KeyEvent.VK_E); jMenuBar.add(jMenuExtensions); jMenuExtensions.setVisible(false); String extensions = GenericObjectEditor.EDITOR_PROPERTIES.getProperty( MainMenuExtension.class.getName(), ""); if (extensions.length() > 0) { jMenuExtensions.setVisible(true); String[] classnames = GenericObjectEditor.EDITOR_PROPERTIES .getProperty(MainMenuExtension.class.getName(), "").split(","); Hashtable submenus = new Hashtable(); // add all extensions for (String classname : classnames) { try { MainMenuExtension ext = (MainMenuExtension) Class .forName(classname).newInstance(); // menuitem in a submenu? JMenu submenu = null; if (ext.getSubmenuTitle() != null) { submenu = submenus.get(ext.getSubmenuTitle()); if (submenu == null) { submenu = new JMenu(ext.getSubmenuTitle()); submenus.put(ext.getSubmenuTitle(), submenu); insertMenuItem(jMenuExtensions, submenu); } } // create menu item JMenuItem menuitem = new JMenuItem(); menuitem.setText(ext.getMenuTitle()); // does the extension need a frame or does it have its own // ActionListener? ActionListener listener = ext.getActionListener(m_Self); if (listener != null) { menuitem.addActionListener(listener); } else { final JMenuItem finalMenuitem = menuitem; final MainMenuExtension finalExt = ext; menuitem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Component frame = createFrame(m_Self, finalMenuitem.getText(), null, null, null, -1, -1, null, false, false); finalExt.fillFrame(frame); frame.setVisible(true); } }); } // sorted insert of menu item if (submenu != null) { insertMenuItem(submenu, menuitem); } else { insertMenuItem(jMenuExtensions, menuitem); } } catch (Exception e) { e.printStackTrace(); } } } // Windows jMenuWindows = new JMenu(Messages.getInstance().getString( "Main_InitGUI_JMenuWindows_JMenu_Text")); jMenuWindows.setMnemonic(java.awt.event.KeyEvent.VK_W); jMenuBar.add(jMenuWindows); jMenuWindows.setVisible(false); // initially, there are no windows open // Help jMenuHelp = new JMenu(); jMenuBar.add(jMenuHelp); jMenuHelp.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuHelp_SetText_Text")); jMenuHelp.setMnemonic('H'); // Help/Homepage jMenuItemHelpHomepage = new JMenuItem(); jMenuHelp.add(jMenuItemHelpHomepage); jMenuItemHelpHomepage.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemHelpHomepage_SetText_Text")); jMenuItemHelpHomepage.setMnemonic('H'); jMenuItemHelpHomepage.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { BrowserHelper.openURL( m_Self, Messages.getInstance().getString( "Main_InitGUI_BrowserHelper_OpenURL_Text_First")); } }); jMenuHelp.add(new JSeparator()); /* * // Help/WekaDoc jMenuItemHelpWekaDoc = new JMenuItem(); * jMenuHelp.add(jMenuItemHelpWekaDoc); * jMenuItemHelpWekaDoc.setText("Online documentation"); * jMenuItemHelpWekaDoc.setMnemonic('D'); * jMenuItemHelpWekaDoc.addActionListener(new ActionListener() { public * void actionPerformed(ActionEvent evt) { BrowserHelper.openURL(m_Self, * "http://weka.sourceforge.net/wekadoc/"); } }); */ // Help/WekaWiki jMenuItemHelpWekaWiki = new JMenuItem(); jMenuHelp.add(jMenuItemHelpWekaWiki); jMenuItemHelpWekaWiki.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemHelpWekaWiki_SetText_Text")); jMenuItemHelpWekaWiki.setMnemonic('W'); jMenuItemHelpWekaWiki.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { BrowserHelper.openURL( m_Self, Messages.getInstance().getString( "Main_InitGUI_BrowserHelper_OpenURL_Text_Second")); } }); // Help/Sourceforge jMenuItemHelpSourceforge = new JMenuItem(); jMenuHelp.add(jMenuItemHelpSourceforge); jMenuItemHelpSourceforge.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemHelpSourceforge_SetText_Text")); jMenuItemHelpSourceforge.setMnemonic('F'); jMenuItemHelpSourceforge.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { BrowserHelper.openURL( m_Self, Messages.getInstance().getString( "Main_InitGUI_BrowserHelperOpenURL_Text_Third")); } }); jMenuHelp.add(new JSeparator()); // Help/SystemInfo jMenuItemHelpSystemInfo = new JMenuItem(); jMenuHelp.add(jMenuItemHelpSystemInfo); jMenuItemHelpSystemInfo.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemHelpSystemInfo_SetText_Text")); jMenuItemHelpHomepage.setMnemonic('S'); jMenuItemHelpSystemInfo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemHelpSystemInfo.getText(); if (!containsWindow(title)) { // get info Hashtable info = new SystemInfo().getSystemInfo(); // sort names Vector names = new Vector(); Enumeration enm = info.keys(); while (enm.hasMoreElements()) { names.add(enm.nextElement()); } Collections.sort(names); // generate table String[][] data = new String[info.size()][2]; for (int i = 0; i < names.size(); i++) { data[i][0] = names.get(i).toString(); data[i][1] = info.get(data[i][0]).toString(); } String[] titles = new String[] { Messages.getInstance().getString("Main_InitGUI_Title_Text_First"), Messages.getInstance() .getString("Main_InitGUI_Title_Text_Second") }; JTable table = new JTable(data, titles); createFrame(m_Self, title, new JScrollPane(table), new BorderLayout(), BorderLayout.CENTER, 800, 600, null, true, true); } else { showWindow(getWindow(title)); } } }); jMenuHelp.add(new JSeparator()); // Help/About jMenuItemHelpAbout = new JMenuItem(); jMenuHelp.add(jMenuItemHelpAbout); jMenuItemHelpAbout.setText(Messages.getInstance().getString( "Main_InitGUI_JMenuItemHelpAbout_SetText_Text")); jMenuItemHelpAbout.setMnemonic('A'); jMenuItemHelpAbout.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String title = jMenuItemHelpAbout.getText(); if (!containsWindow(title)) { JPanel wekaPan = new JPanel(); wekaPan.setToolTipText(Messages.getInstance().getString( "Main_InitGUI_WekaPan_JPanel_SetToolTipText_Text")); ImageIcon wii = new ImageIcon(Toolkit.getDefaultToolkit().getImage( ClassLoader.getSystemResource("weka/gui/weka3.gif"))); JLabel wekaLab = new JLabel(wii); wekaPan.add(wekaLab); Container frame = createFrame(m_Self, title, wekaPan, new BorderLayout(), BorderLayout.CENTER, -1, -1, null, true, true); JPanel titlePan = new JPanel(); titlePan.setLayout(new GridLayout(8, 1)); titlePan.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5)); titlePan.add(new JLabel(Messages.getInstance().getString( "Main_InitGUI_TitlePan_Add_JLabel_Text_First"), SwingConstants.CENTER)); titlePan.add(new JLabel(Messages.getInstance().getString( "Main_InitGUI_TitlePan_Add_JLabel_Text_Second"), SwingConstants.CENTER)); titlePan.add(new JLabel(Messages.getInstance().getString( "Main_InitGUI_TitlePan_Add_JLabel_Text_Third"))); titlePan.add(new JLabel(Messages.getInstance().getString( "Main_InitGUI_TitlePan_Add_JLabel_Text_Fourth") + Version.VERSION, SwingConstants.CENTER)); titlePan.add(new JLabel(Messages.getInstance().getString( "Main_InitGUI_TitlePan_Add_JLabel_Text_Fifth"))); titlePan.add(new JLabel(Messages.getInstance().getString( "Main_InitGUI_TitlePan_Add_JLabel_Text_Sixth") + Copyright.getFromYear() + " - " + Copyright.getToYear(), SwingConstants.CENTER)); titlePan.add(new JLabel(Copyright.getOwner(), SwingConstants.CENTER)); titlePan.add(new JLabel(Copyright.getAddress(), SwingConstants.CENTER)); if (frame instanceof ChildFrameMDI) { ((ChildFrameMDI) frame).getContentPane().add(titlePan, BorderLayout.NORTH); ((ChildFrameMDI) frame).pack(); } else if (frame instanceof ChildFrameSDI) { ((ChildFrameSDI) frame).getContentPane().add(titlePan, BorderLayout.NORTH); ((ChildFrameSDI) frame).pack(); } } else { showWindow(getWindow(title)); } } }); // size + position int screenHeight = getGraphicsConfiguration().getBounds().height; int screenWidth = getGraphicsConfiguration().getBounds().width; if (m_GUIType == GUI_MDI) { int newHeight = (int) (screenHeight * 0.75); int newWidth = (int) (screenWidth * 0.75); setSize(1000 > newWidth ? newWidth : 1000, 800 > newHeight ? newHeight : 800); setLocation((screenWidth - getBounds().width) / 2, (screenHeight - getBounds().height) / 2); } else if (m_GUIType == GUI_SDI) { pack(); setSize(screenWidth, getHeight()); setLocation(0, 0); } } catch (Exception e) { e.printStackTrace(); } } /** * creates and displays the title. * * @param title the additional part of the title */ protected void createTitle(String title) { String newTitle; newTitle = Messages.getInstance().getString( "Main_CreateTitle_NewTitle_Text") + new Version(); if (title.length() != 0) { newTitle += " - " + title; } setTitle(newTitle); } /** * adds the given child frame to the list of frames. * * @param c the child frame to add */ public void addChildFrame(Container c) { m_ChildFrames.add(c); windowListChanged(); } /** * tries to remove the child frame, it returns true if it could do such. * * @param c the child frame to remove * @return true if the child frame could be removed */ public boolean removeChildFrame(Container c) { boolean result = m_ChildFrames.remove(c); windowListChanged(); return result; } /** * brings child frame to the top. * * @param c the frame to activate * @return true if frame was activated */ public boolean showWindow(Container c) { boolean result; ChildFrameMDI mdiFrame; ChildFrameSDI sdiFrame; if (c != null) { try { if (c instanceof ChildFrameMDI) { mdiFrame = (ChildFrameMDI) c; mdiFrame.setIcon(false); mdiFrame.toFront(); createTitle(mdiFrame.getTitle()); } else if (c instanceof ChildFrameSDI) { sdiFrame = (ChildFrameSDI) c; sdiFrame.setExtendedState(JFrame.NORMAL); sdiFrame.toFront(); createTitle(sdiFrame.getTitle()); } } catch (Exception e) { e.printStackTrace(); } result = true; } else { result = false; } return result; } /** * brings the first frame to the top that is of the specified window class. * * @param windowClass the class to display the first child for * @return true, if a child was found and brought to front */ public boolean showWindow(Class windowClass) { return showWindow(getWindow(windowClass)); } /** * returns all currently open frames. * * @return an iterator over all currently open frame */ public Iterator getWindowList() { return m_ChildFrames.iterator(); } /** * returns the first instance of the given window class, null if none can be * found. * * @param windowClass the class to retrieve the first instance for * @return null, if no instance can be found */ public Container getWindow(Class windowClass) { Container result; Iterator iter; Container current; result = null; iter = getWindowList(); while (iter.hasNext()) { current = (Container) iter.next(); if (current.getClass() == windowClass) { result = current; break; } } return result; } /** * returns the first window with the given title, null if none can be found. * * @param title the title to look for * @return null, if no instance can be found */ public Container getWindow(String title) { Container result; Iterator iter; Container current; boolean found; result = null; iter = getWindowList(); while (iter.hasNext()) { current = (Container) iter.next(); found = false; if (current instanceof ChildFrameMDI) { found = ((ChildFrameMDI) current).getTitle().equals(title); } else if (current instanceof ChildFrameSDI) { found = ((ChildFrameSDI) current).getTitle().equals(title); } if (found) { result = current; break; } } return result; } /** * checks, whether an instance of the given window class is already in the * Window list. * * @param windowClass the class to check for an instance in the current window * list * @return true if the class is already listed in the Window list */ public boolean containsWindow(Class windowClass) { return (getWindow(windowClass) != null); } /** * checks, whether a window with the given title is already in the Window * list. * * @param title the title to check for in the current window list * @return true if a window with the given title is already listed in the * Window list */ public boolean containsWindow(String title) { return (getWindow(title) != null); } /** * minimizes all windows. */ public void minimizeWindows() { Iterator iter; Container frame; iter = getWindowList(); while (iter.hasNext()) { frame = (Container) iter.next(); try { if (frame instanceof ChildFrameMDI) { ((ChildFrameMDI) frame).setIcon(true); } else if (frame instanceof ChildFrameSDI) { ((ChildFrameSDI) frame).setExtendedState(JFrame.ICONIFIED); } } catch (Exception e) { e.printStackTrace(); } } } /** * restores all windows. */ public void restoreWindows() { Iterator iter; Container frame; iter = getWindowList(); while (iter.hasNext()) { frame = (Container) iter.next(); try { if (frame instanceof ChildFrameMDI) { ((ChildFrameMDI) frame).setIcon(false); } else if (frame instanceof ChildFrameSDI) { ((ChildFrameSDI) frame).setExtendedState(JFrame.NORMAL); } } catch (Exception e) { e.printStackTrace(); } } } /** * is called when window list changed somehow (add or remove). */ public void windowListChanged() { createWindowMenu(); } /** * creates the menu of currently open windows. */ protected synchronized void createWindowMenu() { Iterator iter; JMenuItem menuItem; int startIndex; // remove all existing entries jMenuWindows.removeAll(); // minimize + restore + separator menuItem = new JMenuItem(Messages.getInstance().getString( "Main_CreateWindowMenu_MenuItem_JMenuItem_Text_First")); menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { minimizeWindows(); } }); jMenuWindows.add(menuItem); menuItem = new JMenuItem(Messages.getInstance().getString( "Main_CreateWindowMenu_MenuItem_JMenuItem_Text_Second")); menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { restoreWindows(); } }); jMenuWindows.add(menuItem); jMenuWindows.addSeparator(); // windows startIndex = jMenuWindows.getMenuComponentCount() - 1; iter = getWindowList(); jMenuWindows.setVisible(iter.hasNext()); while (iter.hasNext()) { Container frame = (Container) iter.next(); if (frame instanceof ChildFrameMDI) { menuItem = new JMenuItem(((ChildFrameMDI) frame).getTitle()); } else if (frame instanceof ChildFrameSDI) { menuItem = new JMenuItem(((ChildFrameSDI) frame).getTitle()); } insertMenuItem(jMenuWindows, menuItem, startIndex); menuItem.setActionCommand(Integer.toString(frame.hashCode())); menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { Container frame = null; Iterator iter = getWindowList(); while (iter.hasNext()) { frame = (Container) iter.next(); String hashFrame = Integer.toString(frame.hashCode()); if (hashFrame.equals(evt.getActionCommand())) { showWindow(frame); break; } } showWindow(frame); } }); } } /** * Shows or hides this component depending on the value of parameter b. * * @param b if true, shows this component; otherwise, hides this component */ @Override public void setVisible(boolean b) { super.setVisible(b); if (b) { paint(this.getGraphics()); } } /** * Create the singleton instance of the Main GUI. * * @param args commandline options */ public static void createSingleton(String[] args) { if (m_MainSingleton == null) { m_MainSingleton = new Main(); } // set options try { m_MainSingleton.setOptions(args); } catch (Exception e) { e.printStackTrace(); } // notify listeners (if any) for (int i = 0; i < m_StartupListeners.size(); i++) { ((StartUpListener) m_StartupListeners.elementAt(i)).startUpComplete(); } } /** * Return the singleton instance of the Main GUI. * * @return the singleton instance */ public static Main getSingleton() { return m_MainSingleton; } /** * Add a listener to be notified when startup is complete. * * @param s a listener to add */ public static void addStartupListener(StartUpListener s) { m_StartupListeners.add(s); } /** * Gets an enumeration describing the available options. * * @return an enumeration of all the available options. */ @Override public Enumeration listOptions() { Vector result; String desc; SelectedTag tag; int i; result = new Vector(); desc = ""; for (i = 0; i < TAGS_GUI.length; i++) { tag = new SelectedTag(TAGS_GUI[i].getID(), TAGS_GUI); desc += "\t" + tag.getSelectedTag().getIDStr() + " = " + tag.getSelectedTag().getReadable() + "\n"; } result.addElement(new Option(Messages.getInstance().getString( "Main_ListOptions_Option_Text_First") + desc + Messages.getInstance().getString("Main_ListOptions_Option_Text_Second") + new SelectedTag(GUI_MDI, TAGS_GUI) + ")", "gui", 1, "-gui " + Tag.toOptionList(TAGS_GUI))); return result.elements(); } /** * returns the options of the current setup. * * @return the current options */ @Override public String[] getOptions() { Vector result; result = new Vector(); result.add("-gui"); result.add("" + getGUIType()); return result.toArray(new String[result.size()]); } /** * Parses the options for this object. *

* * Valid options are: *

* *

   * -gui <MDI|SDI>
   *  Determines the layout of the GUI:
   *  MDI = MDI Layout
   *  SDI = SDI Layout
   *  (default: MDI)
   * 
* * * * @param options the options to use * @throws Exception if setting of options fails */ @Override public void setOptions(String[] options) throws Exception { String tmpStr; tmpStr = Utils.getOption("gui", options); if (tmpStr.length() != 0) { setGUIType(new SelectedTag(tmpStr, TAGS_GUI)); } else { setGUIType(new SelectedTag(GUI_MDI, TAGS_GUI)); } } /** * Sets the type of GUI to use. * * @param value .the GUI type */ public void setGUIType(SelectedTag value) { if (value.getTags() == TAGS_GUI) { m_GUIType = value.getSelectedTag().getID(); initGUI(); } } /** * Gets the currently set type of GUI to display. * * @return the current GUI Type. */ public SelectedTag getGUIType() { return new SelectedTag(m_GUIType, TAGS_GUI); } /** * starts the application. * * @param args the commandline arguments - ignored */ public static void main(String[] args) { weka.core.logging.Logger.log(weka.core.logging.Logger.Level.INFO, Messages .getInstance().getString("Main_Main_Logger_Text")); LookAndFeel.setLookAndFeel(); try { // uncomment the following line to disable the memory management: // m_Memory.setEnabled(false); // help? if (Utils.getFlag('h', args)) { System.out.println(); System.out.println(Messages.getInstance().getString( "Main_Main_Text_First")); System.out.println(); System.out.println(Messages.getInstance().getString( "Main_Main_Text_Second")); System.out.println(); System.out.println("-h"); System.out.println(Messages.getInstance().getString( "Main_Main_Text_Third")); System.out.println(); Enumeration enu = new Main().listOptions(); while (enu.hasMoreElements()) { Option option = (Option) enu.nextElement(); System.out.println(option.synopsis()); System.out.println(option.description()); } System.out.println(); System.exit(0); } // setup splash screen Main.addStartupListener(new weka.gui.beans.StartUpListener() { @Override public void startUpComplete() { m_MainCommandline = Main.getSingleton(); m_MainCommandline.setVisible(true); } }); Main.addStartupListener(new StartUpListener() { @Override public void startUpComplete() { SplashWindow.disposeSplash(); } }); SplashWindow.splash(ClassLoader .getSystemResource("weka/gui/images/weka_splash.gif")); // start GUI final String[] options = args.clone(); Thread nt = new Thread() { @Override public void run() { weka.gui.SplashWindow.invokeMethod(Main.class.getName(), "createSingleton", options); } }; nt.start(); Thread memMonitor = new Thread() { @Override public void run() { while (true) { // try { // Thread.sleep(4000); // System.gc(); if (m_Memory.isOutOfMemory()) { // clean up m_MainCommandline = null; System.gc(); // display error System.err.println(Messages.getInstance().getString( "Main_Main_Thread_Run_Error_Text_First")); m_Memory.showOutOfMemory(); System.err.println(Messages.getInstance().getString( "Main_Main_Thread_Run_Error_Text_Second")); System.exit(-1); } // } catch(InterruptedException ex) { ex.printStackTrace(); } } } }; memMonitor.setPriority(Thread.MAX_PRIORITY); memMonitor.start(); } catch (Exception ex) { ex.printStackTrace(); System.err.println(ex.getMessage()); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy