⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encodingcomboboxmodel.java

📁 Java的Web报表库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * ========================================
 * JFreeReport : a free Java report library
 * ========================================
 *
 * Project Info:  http://www.jfree.org/jfreereport/index.html
 * Project Lead:  Thomas Morgner;
 *
 * (C) Copyright 2000-2003, by Simba Management Limited and Contributors.
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
 * either version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * --------------------------
 * EncodingComboBoxModel.java
 * --------------------------
 * (C)opyright 2003, by Thomas Morgner and Contributors.
 *
 * Original Author:  Thomas Morgner;
 * Contributor(s):   David Gilbert (for Simba Management Limited);
 *
 * $Id: EncodingComboBoxModel.java,v 1.22.2.2 2003/08/24 14:18:11 taqua Exp $
 *
 * Changes
 * --------
 * 25-Feb-2003 : Added standard header and Javadocs (DG);
 *
 */
package com.jrefinery.report.preview;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.Properties;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

import com.jrefinery.report.util.EncodingSupport;
import com.jrefinery.report.util.Log;
import com.jrefinery.report.util.ReportConfiguration;

/**
 * A model for the 'encoding' combo box.
 * <p>
 * This model is used in the {@link CSVExportDialog} class (and possibly others).
 *
 * @author Thomas Morgner.
 */
public class EncodingComboBoxModel implements ComboBoxModel
{
  /** A default description. */
  private static final String ENCODING_DEFAULT_DESCRIPTION = "[no description]";

  /**
   * An encoding comparator.
   */
  private static class EncodingCarrierComparator implements Comparator
  {
    /**
     * Compares its two arguments for order.  Returns a negative integer,
     * zero, or a positive integer as the first argument is less than, equal
     * to, or greater than the second.
     *
     * @param o1  the first object to be compared.
     * @param o2  the second object to be compared.
     *
     * @return a negative integer, zero, or a positive integer as the
     *         first argument is less than, equal to, or greater than the
     *         second.
     *
     * @throws ClassCastException if the arguments' types prevent them from
     *         being compared by this Comparator.
     */
    public int compare(final Object o1, final Object o2)
    {
      final EncodingCarrier e1 = (EncodingCarrier) o1;
      final EncodingCarrier e2 = (EncodingCarrier) o2;
      return e1.getName().toLowerCase().compareTo(e2.getName().toLowerCase());
    }

    /**
     * Returns <code>true</code> if this object is equal to <code>o</code>, and <code>false</code>
     * otherwise.
     *
     * @param o  the object.
     *
     * @return A boolean.
     */
    public boolean equals(final Object o)
    {
      if (o == null)
      {
        return false;
      }
      return getClass().equals(o.getClass());
    }

    /**
     * All comparators of this type are equal.
     *
     * @return A hash code.
     */
    public int hashCode()
    {
      return getClass().hashCode();
    }
  }

  /**
   * An encoding carrier.
   */
  private static class EncodingCarrier
  {
    /** The encoding name. */
    private String name;

    /** The encoding description. */
    private String description;

    /** The display name. */
    private String displayName;

    /**
     * Creates a new encoding.
     *
     * @param name  the name (<code>null</code> not permitted).
     * @param description  the description.
     */
    public EncodingCarrier(final String name, final String description)
    {
      if (name == null)
      {
        throw new NullPointerException();
      }
      this.name = name;
      this.description = description;
      final StringBuffer dName = new StringBuffer();
      dName.append(name);
      dName.append(" (");
      dName.append(description);
      dName.append(")");
      this.displayName = dName.toString();
    }

    /**
     * Returns the name.
     *
     * @return The name.
     */
    public String getName()
    {
      return name;
    }

    /**
     * Returns the description.
     *
     * @return The description.
     */
    public String getDescription()
    {
      return description;
    }

    /**
     * Returns the display name (the regular name followed by the description in brackets).
     *
     * @return The display name.
     */
    public String getDisplayName()
    {
      return displayName;
    }

    /**
     * Returns <code>true</code> if the objects are equal, and <code>false</code> otherwise.
     *
     * @param o  the object.
     *
     * @return A boolean.
     */
    public boolean equals(final Object o)
    {
      if (this == o)
      {
        return true;
      }
      if (!(o instanceof EncodingCarrier))
      {
        return false;
      }

      final EncodingCarrier carrier = (EncodingCarrier) o;

      if (!name.equalsIgnoreCase(carrier.name))
      {
        return false;
      }

      return true;
    }

    /**
     * Returns a hash code.
     *
     * @return The hash code.
     */
    public int hashCode()
    {
      return name.hashCode();
    }
  }

  /** Contains the known default encodings. */
  private static Properties defaultEncodings;

  /** Storage for the encodings. */
  private ArrayList encodings;

  /** Storage for registered listeners. */
  private ArrayList listDataListeners;

  /** The selected index. */
  private int selectedIndex;

  /** The selected object. */
  private Object selectedObject;

  /**
   * Creates a new model.
   */
  public EncodingComboBoxModel()
  {
    encodings = new ArrayList();
    listDataListeners = null;
    selectedIndex = -1;
  }

  /**
   * Adds an encoding.
   *
   * @param name  the name.
   * @param description  the description.
   *
   * @return <code>true</code> if the encoding is valid and added to the model, <code>false</code>
   *         otherwise.
   */
  public boolean addEncoding(final String name, final String description)
  {
    if (EncodingSupport.isSupportedEncoding(name))
    {
      encodings.add(new EncodingCarrier(name, description));
    }
    else
    {
      return false;
    }

    fireContentsChanged();
    return true;
  }

  /**
   * Adds an encoding to the model without checking its validity.
   *
   * @param name  the name.
   * @param description  the description.
   */
  public void addEncodingUnchecked(final String name, final String description)
  {
    encodings.add(new EncodingCarrier(name, description));
    fireContentsChanged();
  }

  /**
   * Make sure, that this encoding is defined and selectable in the combobox model.
   *
   * @param encoding the encoding that should be verified.
   */
  public void ensureEncodingAvailable(final String encoding)
  {
    final String desc = getDefaultEncodings().getProperty(encoding, ENCODING_DEFAULT_DESCRIPTION);
    final EncodingCarrier ec = new EncodingCarrier(encoding, desc);
    if (encodings.contains(ec) == false)
    {
      encodings.add(ec);
      fireContentsChanged();
    }
  }

  /**
   * Sorts the encodings.
   */
  public void sort()
  {
    Collections.sort(encodings, new EncodingCarrierComparator());
    fireContentsChanged();
  }

  /**
   * Notifies all registered listeners that the content of the model has changed.
   */
  protected void fireContentsChanged()
  {
    if (listDataListeners == null)
    {
      return;
    }
    final ListDataEvent evt = new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, getSize());
    for (int i = 0; i < listDataListeners.size(); i++)
    {
      final ListDataListener l = (ListDataListener) listDataListeners.get(i);
      l.contentsChanged(evt);
    }
  }

  /**
   * Set the selected item. The implementation of this  method should notify
   * all registered <code>ListDataListener</code>s that the contents
   * have changed.
   *
   * @param anItem the list object to select or <code>null</code>
   *        to clear the selection
   */
  public void setSelectedItem(final Object anItem)
  {
    selectedObject = anItem;
    if (anItem != null)
    {
      if (anItem != null && anItem instanceof String)
      {
        final int size = getSize();
        for (int i = 0; i < size; i++)
        {
          if (anItem.equals(getElementAt(i)))
          {
            selectedIndex = i;
            return;
          }
        }
      }
    }
    selectedIndex = -1;
  }

  /**
   * Returns the selected index.
   *
   * @return The index.
   */
  public int getSelectedIndex()
  {
    return selectedIndex;
  }

  /**

⌨️ 快捷键说明

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