Skip to content
Snippets Groups Projects
SwingWrapper.java 4.01 KiB
Newer Older
/**
Tim Molter's avatar
Tim Molter committed
 * Copyright 2015-2016 Knowm Inc. (http://knowm.org) and contributors.
 * Copyright 2011-2015 Xeiam LLC (http://xeiam.com) and contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.knowm.xchart;
Alex Nugent's avatar
Alex Nugent committed

import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
Alex Nugent's avatar
Alex Nugent committed
import javax.swing.JFrame;
import javax.swing.JPanel;

Tim Molter's avatar
Tim Molter committed
import org.knowm.xchart.internal.chartpart.Chart;

Tim Molter's avatar
Tim Molter committed
/**
 * A convenience class used to display a Chart in a barebones Swing application
Tim Molter's avatar
Tim Molter committed
 *
Tim Molter's avatar
Tim Molter committed
 * @author timmolter
 */
Tim Molter's avatar
Tim Molter committed
public class SwingWrapper<T extends Chart> {
Alex Nugent's avatar
Alex Nugent committed

  private String windowTitle = "XChart";

Tim Molter's avatar
Tim Molter committed
  private List<T> charts = new ArrayList<T>();
timmolter's avatar
timmolter committed
  private int numRows;
  private int numColumns;

  /**
   * Constructor
Tim Molter's avatar
Tim Molter committed
   *
timmolter's avatar
timmolter committed
   * @param chart
   */
Tim Molter's avatar
Tim Molter committed
  public SwingWrapper(T chart) {
timmolter's avatar
timmolter committed

timmolter's avatar
timmolter committed
  }

timmolter's avatar
timmolter committed
   * Constructor - The number of rows and columns will be calculated automatically Constructor
Tim Molter's avatar
Tim Molter committed
   *
Tim Molter's avatar
Tim Molter committed
  public SwingWrapper(List<T> charts) {

    this.charts = charts;

    this.numRows = (int) (Math.sqrt(charts.size()) + .5);
    this.numColumns = (int) ((double) charts.size() / this.numRows + 1);
  }

Tim Molter's avatar
Tim Molter committed
   *
   * @param numRows - the number of rows
   * @param numColumns - the number of columns
Tim Molter's avatar
Tim Molter committed
  public SwingWrapper(List<T> charts, int numRows, int numColumns) {
timmolter's avatar
timmolter committed
    this.charts = charts;
    this.numRows = numRows;
    this.numColumns = numColumns;
  }

  /**
   * Display the chart in a Swing JFrame
Tim Molter's avatar
Tim Molter committed
   *
   * @param windowTitle the title of the window
   */
  public JFrame displayChart(String windowTitle) {

    this.windowTitle = windowTitle;

    return displayChart();
  }

timmolter's avatar
timmolter committed
  /**
   * Display the chart in a Swing JFrame
   */
  public JFrame displayChart() {

    // Create and set up the window.
    final JFrame frame = new JFrame(windowTitle);
timmolter's avatar
timmolter committed

    // Schedule a job for the event-dispatching thread:
    // creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Tim Molter's avatar
Tim Molter committed
        JPanel chartPanel = new XChartPanel<T>(charts.get(0));
timmolter's avatar
timmolter committed

        // Display the window.
        frame.pack();
        frame.setVisible(true);
      }
    });
timmolter's avatar
timmolter committed
  }

  /**
   * Display the charts in a Swing JFrame
Tim Molter's avatar
Tim Molter committed
   *
   * @param windowTitle the title of the window
   * @return the JFrame
   */
  public JFrame displayChartMatrix(String windowTitle) {

    this.windowTitle = windowTitle;

    return displayChartMatrix();
  }

timmolter's avatar
timmolter committed
  /**
   * Display the chart in a Swing JFrame
   */
  public JFrame displayChartMatrix() {

    // Create and set up the window.
    final JFrame frame = new JFrame(windowTitle);
timmolter's avatar
timmolter committed

    // Schedule a job for the event-dispatching thread:
    // creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridLayout(numRows, numColumns));

Tim Molter's avatar
Tim Molter committed
        for (T chart : charts) {
Tim Molter's avatar
Tim Molter committed
            JPanel chartPanel = new XChartPanel<T>(chart);
timmolter's avatar
timmolter committed
            frame.add(chartPanel);
Tim Molter's avatar
Tim Molter committed
          }
          else {
timmolter's avatar
timmolter committed
            JPanel chartPanel = new JPanel();
            frame.getContentPane().add(chartPanel);
          }
Alex Nugent's avatar
Alex Nugent committed

timmolter's avatar
timmolter committed
        }
Alex Nugent's avatar
Alex Nugent committed

timmolter's avatar
timmolter committed
        // Display the window.
        frame.pack();
        frame.setVisible(true);
      }
    });
timmolter's avatar
timmolter committed
  }
Alex Nugent's avatar
Alex Nugent committed
}