weka.gui.WekaTaskMonitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of weka-stable Show documentation
Show all versions of weka-stable Show documentation
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.
/*
* 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 3 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, see .
*/
/*
* WekaTaskMonitor.java
* Copyright (C) 2000-2012 University of Waikato, Hamilton, New Zealand
*
*/
package weka.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
/**
* This panel records the number of weka tasks running and displays a
* simple bird animation while their are active tasks
*
* @author Mark Hall ([email protected])
* @version $Revision: 8034 $
*/
public class WekaTaskMonitor
extends JPanel
implements TaskLogger {
/** for serialization */
private static final long serialVersionUID = 508309816292197578L;
/** The number of running weka threads */
private int m_ActiveTasks = 0;
/** The label for displaying info */
private JLabel m_MonitorLabel;
/** The icon for the stationary bird */
private ImageIcon m_iconStationary;
/** The icon for the animated bird */
private ImageIcon m_iconAnimated;
/** True if their are active tasks */
private boolean m_animating = false;
/**
* Constructor
*/
public WekaTaskMonitor() {
java.net.URL imageURL =
this.getClass().getClassLoader().getResource("weka/gui/weka_stationary.gif");
if (imageURL != null) {
Image pic = Toolkit.getDefaultToolkit().getImage(imageURL);
imageURL =
this.getClass().getClassLoader().getResource("weka/gui/weka_animated.gif");
Image pic2 = Toolkit.getDefaultToolkit().getImage(imageURL);
/* Image pic = Toolkit.getDefaultToolkit().
getImage(ClassLoader.getSystemResource("weka/gui/weka_stationary.gif"));
Image pic2 = Toolkit.getDefaultToolkit().
getImage(ClassLoader.getSystemResource("weka/gui/weka_animated.gif")); */
m_iconStationary = new ImageIcon(pic);
m_iconAnimated = new ImageIcon(pic2);
}
m_MonitorLabel = new JLabel(" x "+m_ActiveTasks,m_iconStationary,SwingConstants.CENTER);
/*
setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Weka Tasks"),
BorderFactory.createEmptyBorder(0, 5, 5, 5)
));
*/
setLayout(new BorderLayout());
Dimension d = m_MonitorLabel.getPreferredSize();
m_MonitorLabel.setPreferredSize(new Dimension(d.width+15,d.height));
m_MonitorLabel.setMinimumSize(new Dimension(d.width+15,d.height));
add(m_MonitorLabel, BorderLayout.CENTER);
}
/**
* Tells the panel that a new task has been started
*/
public synchronized void taskStarted() {
m_ActiveTasks++;
updateMonitor();
}
/**
* Tells the panel that a task has completed
*/
public synchronized void taskFinished() {
m_ActiveTasks--;
if (m_ActiveTasks < 0) {
m_ActiveTasks = 0;
}
updateMonitor();
}
/**
* Updates the number of running tasks an the status of the bird
* image
*/
private void updateMonitor() {
m_MonitorLabel.setText(" x "+m_ActiveTasks);
if (m_ActiveTasks > 0 && !m_animating) {
m_MonitorLabel.setIcon(m_iconAnimated);
m_animating = true;
}
if (m_ActiveTasks == 0 && m_animating) {
m_MonitorLabel.setIcon(m_iconStationary);
m_animating = false;
}
}
/**
* Main method for testing this class
*/
public static void main(String [] args) {
try {
final javax.swing.JFrame jf = new javax.swing.JFrame();
jf.getContentPane().setLayout(new BorderLayout());
final WekaTaskMonitor tm = new WekaTaskMonitor();
tm.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Weka Tasks"),
BorderFactory.createEmptyBorder(0, 5, 5, 5)
));
jf.getContentPane().add(tm, BorderLayout.CENTER);
jf.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
jf.dispose();
System.exit(0);
}
});
jf.pack();
jf.setVisible(true);
tm.taskStarted();
} catch (Exception ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
}
}
}