jcomponentwriter.java

来自「Weka」· Java 代码 · 共 357 行

JAVA
357
字号
 /*  *    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.  */ /*  *    JComponentWriter.java  *    Copyright (C) 2005 University of Waikato, Hamilton, New Zealand  *  */package weka.gui.visualize;import java.io.File;import javax.swing.JComponent;/**  * This class takes any JComponent and outputs it to a file. Scaling is by * default enabled. Derived classes only need to override the following * methods: * <ul> *   <li><code>getDescription()</code></li> *   <li><code>getExtension()</code></li> *   <li><code>generateOutput()</code></li> *   <li><code></code></li> * </ul> * * @see #setScalingEnabled(boolean) * @author FracPete (fracpete at waikato dot ac dot nz) * @version $Revision: 1.4 $ */public abstract class JComponentWriter {  /** whether to print some debug information */  protected final static boolean DEBUG = false;    /** output if we're in debug mode */  static {    if (DEBUG)      System.err.println(JComponentWriter.class.getName() + ": DEBUG ON");  }    /** the component to print in the output format */  private JComponent component;    /** the file to write the output stream to */  private File outputFile;    /** the x scale factor */  protected double m_xScale;    /** the y scale factor */  protected double m_yScale;  /** whether scaling is enabled */  protected boolean m_ScalingEnabled;    /** whether to use custom dimensions */  protected boolean m_UseCustomDimensions;    /** the custom width */  protected int m_CustomWidth;    /** the custom height */  protected int m_CustomHeight;    /**   * initializes the object    */  public JComponentWriter() {    this(null);  }    /**   * initializes the object with the given Component   *    * @param c         the component to print in the output format   */  public JComponentWriter(JComponent c) {    this(c, null);  }    /**   * initializes the object with the given Component and filename   *    * @param c         the component to print in the output format   * @param f         the file to store the output in   */  public JComponentWriter(JComponent c, File f) {    component  = c;    outputFile = f;        initialize();  }    /**   * further initialization can take place here    */  protected void initialize() {    m_xScale = 1.0;    m_yScale = 1.0;    m_ScalingEnabled = true;    m_UseCustomDimensions = false;    m_CustomWidth = -1;    m_CustomHeight = -1;  }    /**   * sets the component to print to an output format   *    * @param c the component to print   */  public void setComponent(JComponent c) {    component = c;  }    /**   * returns the component that is stored in the output format   *    * @return the component to print   */  public JComponent getComponent() {    return component;  }    /**   * sets the file to store the output in   *    * @param f the file to store the output in   */  public void setFile(File f) {    outputFile = f;  }    /**   * returns the file being used for storing the output   *    * @return the file to store the output in   */  public File getFile() {    return outputFile;  }    /**   * returns the name of the writer, to display in the FileChooser.   * must be overridden in the derived class.   *    * @return the name of the writer   */  public abstract String getDescription();    /**   * returns the extension (incl. ".") of the output format, to use in the   * FileChooser.    * must be overridden in the derived class.   *    * @return the file extension   */  public abstract String getExtension();    /**   * whether scaling is enabled or ignored   *    * @return true if scaling is enabled   */  public boolean getScalingEnabled() {    return m_ScalingEnabled;  }    /**   * sets whether to enable scaling   *    * @param enabled whether scaling is enabled   */  public void setScalingEnabled(boolean enabled) {    m_ScalingEnabled = enabled;  }    /**   * sets the scale factor - is ignored since we always create a screenshot!   * @param x the scale factor for the x-axis    * @param y the scale factor for the y-axis    */  public void setScale(double x, double y) {    if (getScalingEnabled()) {      m_xScale = x;      m_yScale = y;    }    else {      m_xScale = 1.0;      m_yScale = 1.0;    }        if (DEBUG)      System.err.println("xScale = " + m_xScale + ", yScale = " + m_yScale);  }    /**   * returns the scale factor for the x-axis   *    * @return the scale scale factor for the x-axis   */  public double getXScale() {    return m_xScale;  }    /**   * returns the scale factor for the y-axis   *    * @return the scale scale factor for the y-axis   */  public double getYScale() {    return m_xScale;  }    /**   * whether custom dimensions are to used for the size of the image   *    * @return true if custom dimensions are used   */  public boolean getUseCustomDimensions() {    return m_UseCustomDimensions;  }    /**   * sets whether to use custom dimensions for the image   *    * @param value whether custom dimensions are used   */  public void setUseCustomDimensions(boolean value) {    m_UseCustomDimensions = value;  }    /**   * sets the custom width to use   *    * @param value the width to use   * @see #m_UseCustomDimensions   */  public void setCustomWidth(int value) {    m_CustomWidth = value;  }    /**   * gets the custom width currently used   *    * @return the custom width currently used   * @see #m_UseCustomDimensions   */  public int getCustomWidth() {    return m_CustomWidth;  }    /**   * sets the custom height to use   *    * @param value the height to use   * @see #m_UseCustomDimensions   */  public void setCustomHeight(int value) {    m_CustomHeight = value;  }    /**   * gets the custom height currently used   *    * @return the custom height currently used   * @see #m_UseCustomDimensions   */  public int getCustomHeight() {    return m_CustomHeight;  }    /**   * generates the actual output   *    * @throws Exception	if something goes wrong   */  protected abstract void generateOutput() throws Exception;    /**   * saves the current component to the currently set file.<p>   * <b>Note:</b> this method calls <code>generateOutput()</code> which needs    * to be overriden in subclasses!   * @throws Exception      if either the file or the component is <code>null</code>   */  public void toOutput() throws Exception {    int		oldWidth;    int		oldHeight;    if (getFile() == null)      throw new Exception("The file is not set!");    if (getComponent() == null)      throw new Exception("The component is not set!");    // backup original dimensions and set custom ones if necessary    oldWidth  = getComponent().getWidth();    oldHeight = getComponent().getHeight();    if (getUseCustomDimensions())      getComponent().setSize(getCustomWidth(), getCustomHeight());    generateOutput();        // restore original dimensions    if (getUseCustomDimensions())      getComponent().setSize(oldWidth, oldHeight);  }    /**   * outputs the given component with the given writer in the specified file   *    * @param writer	the writer to use   * @param comp	the component to output   * @param file	the file to store the output in    * @throws Exception  if component of file are <code>null</code>   */  public static void toOutput(JComponentWriter writer, JComponent comp, File file) throws Exception {    toOutput(writer, comp, file, -1, -1);  }    /**   * outputs the given component with the given writer in the specified file.    * If width and height are different from -1 then these sizes are used,    * otherwise the current ones of the component   *    * @param writer	the writer to use   * @param comp	the component to output   * @param file	the file to store the output in    * @param width	custom width, -1 uses the component's one   * @param height	custom height, -1 uses the component's one   * @throws Exception  if component or file are <code>null</code>   */  public static void toOutput(JComponentWriter writer, JComponent comp, File file, int width, int height) throws Exception {    writer.setComponent(comp);    writer.setFile(file);        // custom dimensions?    if ((width != -1) && (height != -1)) {      writer.setUseCustomDimensions(true);      writer.setCustomWidth(width);      writer.setCustomHeight(height);    }        writer.toOutput();  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?