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

weka.gui.WekaTaskMonitor Maven / Gradle / Ivy

Go to download

The Waikato Environment for Knowledge Analysis (WEKA), a machine learning workbench. This version represents the developer version, the "bleeding edge" of development, you could say. New functionality gets added to this version.

There is a newer version: 3.9.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 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());
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy