Java Code Examples for org.jfree.chart.ChartPanel#getChartRenderingInfo()

The following examples show how to use org.jfree.chart.ChartPanel#getChartRenderingInfo() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ChartLogics.java    From mzmine3 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Find chartentities like JFreeChartEntity, AxisEntity, PlotEntity, TitleEntity, XY...
 * 
 * @param chart
 * @param mx mouse coordinates
 * @param my mouse coordinates
 * @return
 */
public static ChartEntity findChartEntity(ChartPanel chart, double mx, double my) {
  // TODO check if insets were needed
  // coordinates to find chart entities
  Insets insets = chart.getInsets();
  int x = (int) ((mx - insets.left) / chart.getScaleX());
  int y = (int) ((my - insets.top) / chart.getScaleY());

  ChartRenderingInfo info = chart.getChartRenderingInfo();
  ChartEntity entity = null;
  if (info != null) {
    EntityCollection entities = info.getEntityCollection();
    if (entities != null) {
      entity = entities.getEntity(x, y);
    }
  }
  return entity;
}
 
Example 2
Source File: ChartGestureMouseAdapter.java    From mzmine3 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Find chartentities like JFreeChartEntity, AxisEntity, PlotEntity, TitleEntity, XY...
 * 
 * @param chartPanel
 * @param x
 * @param y
 * @return
 */
private ChartEntity findChartEntity(ChartPanel chartPanel, MouseEvent e) {
  // coordinates to find chart entities
  Insets insets = chartPanel.getInsets();
  int x = (int) ((e.getX() - insets.left) / chartPanel.getScaleX());
  int y = (int) ((e.getY() - insets.top) / chartPanel.getScaleY());

  if (lastEntity != null && x == lastEntityX && y == lastEntityY)
    return lastEntity;
  else {
    ChartRenderingInfo info = chartPanel.getChartRenderingInfo();
    ChartEntity entity = null;
    if (info != null) {
      EntityCollection entities = info.getEntityCollection();
      if (entities != null) {
        entity = entities.getEntity(x, y);
      }
    }
    return entity;
  }
}
 
Example 3
Source File: ChartLogics.java    From old-mzmine3 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Find chartentities like JFreeChartEntity, AxisEntity, PlotEntity, TitleEntity, XY...
 * 
 * @param chart
 * @param mx mouse coordinates
 * @param my mouse coordinates
 * @return
 */
public static ChartEntity findChartEntity(ChartPanel chart, double mx, double my) {
  // TODO check if insets were needed
  // coordinates to find chart entities
  Insets insets = chart.getInsets();
  int x = (int) ((mx - insets.left) / chart.getScaleX());
  int y = (int) ((my - insets.top) / chart.getScaleY());

  ChartRenderingInfo info = chart.getChartRenderingInfo();
  ChartEntity entity = null;
  if (info != null) {
    EntityCollection entities = info.getEntityCollection();
    if (entities != null) {
      entity = entities.getEntity(x, y);
    }
  }
  return entity;
}
 
Example 4
Source File: ChartGestureMouseAdapter.java    From mzmine2 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Find chartentities like JFreeChartEntity, AxisEntity, PlotEntity, TitleEntity, XY...
 * 
 * @param chartPanel
 * @param x
 * @param y
 * @return
 */
private ChartEntity findChartEntity(ChartPanel chartPanel, MouseEvent e) {
  // coordinates to find chart entities
  Insets insets = chartPanel.getInsets();
  int x = (int) ((e.getX() - insets.left) / chartPanel.getScaleX());
  int y = (int) ((e.getY() - insets.top) / chartPanel.getScaleY());

  if (lastEntity != null && x == lastEntityX && y == lastEntityY)
    return lastEntity;
  else {
    ChartRenderingInfo info = chartPanel.getChartRenderingInfo();
    ChartEntity entity = null;
    if (info != null) {
      EntityCollection entities = info.getEntityCollection();
      if (entities != null) {
        entity = entities.getEntity(x, y);
      }
    }
    return entity;
  }
}
 
Example 5
Source File: ChartLogics.java    From mzmine2 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Find chartentities like JFreeChartEntity, AxisEntity, PlotEntity, TitleEntity, XY...
 * 
 * @param chart
 * @param mx mouse coordinates
 * @param my mouse coordinates
 * @return
 */
public static ChartEntity findChartEntity(ChartPanel chart, double mx, double my) {
  // TODO check if insets were needed
  // coordinates to find chart entities
  Insets insets = chart.getInsets();
  int x = (int) ((mx - insets.left) / chart.getScaleX());
  int y = (int) ((my - insets.top) / chart.getScaleY());

  ChartRenderingInfo info = chart.getChartRenderingInfo();
  ChartEntity entity = null;
  if (info != null) {
    EntityCollection entities = info.getEntityCollection();
    if (entities != null) {
      entity = entities.getEntity(x, y);
    }
  }
  return entity;
}
 
Example 6
Source File: ChartGestureMouseAdapter.java    From old-mzmine3 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Find chartentities like JFreeChartEntity, AxisEntity, PlotEntity, TitleEntity, XY...
 * 
 * @param chartPanel
 * @param x
 * @param y
 * @return
 */
private ChartEntity findChartEntity(ChartPanel chartPanel, MouseEvent e) {
  // coordinates to find chart entities
  Insets insets = chartPanel.getInsets();
  int x = (int) ((e.getX() - insets.left) / chartPanel.getScaleX());
  int y = (int) ((e.getY() - insets.top) / chartPanel.getScaleY());

  if (lastEntity != null && x == lastEntityX && y == lastEntityY)
    return lastEntity;
  else {
    ChartRenderingInfo info = chartPanel.getChartRenderingInfo();
    ChartEntity entity = null;
    if (info != null) {
      EntityCollection entities = info.getEntityCollection();
      if (entities != null) {
        entity = entities.getEntity(x, y);
      }
    }
    return entity;
  }
}
 
Example 7
Source File: ChartLogics.java    From mzmine3 with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Data width to pixel width on screen
 * 
 * @param myChart
 * @param dataWidth width of data
 * @param axis for width calculation
 * @return
 */
public static double calcWidthOnScreen(ChartPanel myChart, double dataWidth, ValueAxis axis,
    RectangleEdge axisEdge) {
  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();

  double width2D = axis.lengthToJava2D(dataWidth, dataArea, axisEdge);

  return width2D;
}
 
Example 8
Source File: ChartLogics.java    From mzmine2 with GNU General Public License v2.0 5 votes vote down vote up
/**
 * 
 * Domain and Range axes need to share the same unit (e.g. mm)
 * 
 * @param myChart
 * @return
 */
public static double calcWidthToHeight(ChartPanel myChart, double chartHeight) {
  makeChartResizable(myChart);
  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = new JPanel();
  p.removeAll();
  p.add(myChart, BorderLayout.CENTER);
  p.setBounds(myChart.getBounds());
  myChart.paintImmediately(myChart.getBounds());
  p.removeAll();
  parent.add(myChart);

  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();
  Rectangle2D chartArea = info.getChartArea();


  // calc title space: will be added later to the right plot size
  double titleWidth = chartArea.getWidth() - dataArea.getWidth();
  double titleHeight = chartArea.getHeight() - dataArea.getHeight();

  // calc right plot size with axis dim.
  // real plot width is given by factor;
  double realPH = chartHeight - titleHeight;

  // ranges
  ValueAxis domainAxis = plot.getDomainAxis();
  org.jfree.data.Range x = domainAxis.getRange();
  ValueAxis rangeAxis = plot.getRangeAxis();
  org.jfree.data.Range y = rangeAxis.getRange();

  // real plot height can be calculated by
  double realPW = realPH / y.getLength() * x.getLength();

  double width = realPW + titleWidth;

  return width;
}
 
Example 9
Source File: ChartLogics.java    From mzmine3 with GNU General Public License v2.0 5 votes vote down vote up
/**
 * 
 * Domain and Range axes need to share the same unit (e.g. mm)
 * 
 * @param myChart
 * @return
 */
public static double calcWidthToHeight(ChartPanel myChart, double chartHeight) {
  makeChartResizable(myChart);
  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = new JPanel();
  p.removeAll();
  p.add(myChart, BorderLayout.CENTER);
  p.setBounds(myChart.getBounds());
  myChart.paintImmediately(myChart.getBounds());
  p.removeAll();
  parent.add(myChart);

  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();
  Rectangle2D chartArea = info.getChartArea();

  // calc title space: will be added later to the right plot size
  double titleWidth = chartArea.getWidth() - dataArea.getWidth();
  double titleHeight = chartArea.getHeight() - dataArea.getHeight();

  // calc right plot size with axis dim.
  // real plot width is given by factor;
  double realPH = chartHeight - titleHeight;

  // ranges
  ValueAxis domainAxis = plot.getDomainAxis();
  org.jfree.data.Range x = domainAxis.getRange();
  ValueAxis rangeAxis = plot.getRangeAxis();
  org.jfree.data.Range y = rangeAxis.getRange();

  // real plot height can be calculated by
  double realPW = realPH / y.getLength() * x.getLength();

  double width = realPW + titleWidth;

  return width;
}
 
Example 10
Source File: ChartLogics.java    From mzmine2 with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Data width to pixel width on screen
 * 
 * @param myChart
 * @param dataWidth width of data
 * @param axis for width calculation
 * @return
 */
public static double calcWidthOnScreen(ChartPanel myChart, double dataWidth, ValueAxis axis,
    RectangleEdge axisEdge) {
  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();

  double width2D = axis.lengthToJava2D(dataWidth, dataArea, axisEdge);

  return width2D;
}
 
Example 11
Source File: ChartLogics.java    From old-mzmine3 with GNU General Public License v2.0 5 votes vote down vote up
/**
 * 
 * Domain and Range axes need to share the same unit (e.g. mm)
 * 
 * @param myChart
 * @return
 */
public static double calcWidthToHeight(ChartPanel myChart, double chartHeight) {
  makeChartResizable(myChart);
  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = new JPanel();
  p.removeAll();
  p.add(myChart, BorderLayout.CENTER);
  p.setBounds(myChart.getBounds());
  myChart.paintImmediately(myChart.getBounds());
  p.removeAll();
  parent.add(myChart);

  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();
  Rectangle2D chartArea = info.getChartArea();


  // calc title space: will be added later to the right plot size
  double titleWidth = chartArea.getWidth() - dataArea.getWidth();
  double titleHeight = chartArea.getHeight() - dataArea.getHeight();

  // calc right plot size with axis dim.
  // real plot width is given by factor;
  double realPH = chartHeight - titleHeight;

  // ranges
  ValueAxis domainAxis = plot.getDomainAxis();
  org.jfree.data.Range x = domainAxis.getRange();
  ValueAxis rangeAxis = plot.getRangeAxis();
  org.jfree.data.Range y = rangeAxis.getRange();

  // real plot height can be calculated by
  double realPW = realPH / y.getLength() * x.getLength();

  double width = realPW + titleWidth;

  return width;
}
 
Example 12
Source File: ChartLogics.java    From mzmine2 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Returns dimensions for limiting factor width or height
 * 
 * @param myChart
 * @return
 */
public static Dimension calcMaxSize(ChartPanel myChart, double chartWidth, double chartHeight) {
  makeChartResizable(myChart);
  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = new JPanel();
  p.removeAll();
  p.add(myChart, BorderLayout.CENTER);
  p.setBounds(myChart.getBounds());
  myChart.paintImmediately(myChart.getBounds());
  p.removeAll();
  parent.add(myChart);

  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();
  Rectangle2D chartArea = info.getChartArea();


  // calc title space: will be added later to the right plot size
  double titleWidth = chartArea.getWidth() - dataArea.getWidth();
  double titleHeight = chartArea.getHeight() - dataArea.getHeight();

  // calculatig width for max height

  // calc right plot size with axis dim.
  // real plot width is given by factor;
  double realPH = chartHeight - titleHeight;

  // ranges
  ValueAxis domainAxis = plot.getDomainAxis();
  org.jfree.data.Range x = domainAxis.getRange();
  ValueAxis rangeAxis = plot.getRangeAxis();
  org.jfree.data.Range y = rangeAxis.getRange();

  // real plot height can be calculated by
  double realPW = realPH / y.getLength() * x.getLength();

  double width = realPW + titleWidth;
  // if width is higher than given chartWidth then calc height for chartWidth
  if (width > chartWidth) {
    // calc right plot size with axis dim.
    // real plot width is given by factor;
    realPW = chartWidth - titleWidth;

    // real plot height can be calculated by
    realPH = realPW / x.getLength() * y.getLength();

    double height = realPH + titleHeight;
    // Return size
    return new Dimension((int) chartWidth, (int) height);
  } else {
    // Return size
    return new Dimension((int) width, (int) chartHeight);
  }
}
 
Example 13
Source File: ChartLogics.java    From mzmine2 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * calculates the correct height with multiple iterations Domain and Range axes need to share the
 * same unit (e.g. mm)
 * 
 * @param myChart
 * @param copyToNewPanel
 * @param dataWidth width of data
 * @param axis for width calculation
 * @return
 */
public static double calcHeightToWidth(ChartPanel myChart, double chartWidth,
    double estimatedHeight, int iterations, boolean copyToNewPanel) {
  // if(myChart.getChartRenderingInfo()==null ||
  // myChart.getChartRenderingInfo().getChartArea()==null ||
  // myChart.getChartRenderingInfo().getChartArea().getWidth()==0)
  // result
  double height = estimatedHeight;
  double lastH = height;

  makeChartResizable(myChart);

  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = copyToNewPanel ? new JPanel() : parent;
  if (copyToNewPanel)
    p.add(myChart, BorderLayout.CENTER);
  try {
    for (int i = 0; i < iterations; i++) {
      // paint on ghost panel with estimated height (if copy panel==true)
      myChart.setSize((int) chartWidth, (int) estimatedHeight);
      myChart.paintImmediately(myChart.getBounds());

      XYPlot plot = (XYPlot) myChart.getChart().getPlot();
      ChartRenderingInfo info = myChart.getChartRenderingInfo();
      Rectangle2D dataArea = info.getPlotInfo().getDataArea();
      Rectangle2D chartArea = info.getChartArea();

      // calc title space: will be added later to the right plot size
      double titleWidth = chartArea.getWidth() - dataArea.getWidth();
      double titleHeight = chartArea.getHeight() - dataArea.getHeight();

      // calc right plot size with axis dim.
      // real plot width is given by factor;
      double realPW = chartWidth - titleWidth;

      // ranges
      ValueAxis domainAxis = plot.getDomainAxis();
      org.jfree.data.Range x = domainAxis.getRange();
      ValueAxis rangeAxis = plot.getRangeAxis();
      org.jfree.data.Range y = rangeAxis.getRange();

      // real plot height can be calculated by
      double realPH = realPW / x.getLength() * y.getLength();

      // the real height
      height = realPH + titleHeight;

      // for next iteration
      estimatedHeight = height;
      if ((int) lastH == (int) height)
        break;
      else
        lastH = height;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  }

  if (copyToNewPanel) {
    // reset to frame
    p.removeAll();
    parent.add(myChart);
  }

  return height;
}
 
Example 14
Source File: ChartLogics.java    From mzmine2 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Calculates the size of a chart for a given fixed plot width and height
 * 
 * @param chart
 * @param plotWidth
 * @return
 */
public static Dimension calcSizeForPlotSize(ChartPanel myChart, double plotWidth,
    double plotHeight, int iterations) {
  makeChartResizable(myChart);

  // estimate plotwidth / height
  double estimatedChartWidth = plotWidth + 200;
  double estimatedChartHeight = plotHeight + 200;

  double lastW = estimatedChartWidth;
  double lastH = estimatedChartHeight;

  // paint and get closer
  try {
    for (int i = 0; i < iterations; i++) {
      // paint on ghost panel with estimated height (if copy panel==true)
      myChart.setSize((int) estimatedChartWidth, (int) estimatedChartHeight);
      myChart.paintImmediately(myChart.getBounds());

      // rendering info
      ChartRenderingInfo info = myChart.getChartRenderingInfo();
      Rectangle2D dataArea = info.getPlotInfo().getDataArea();
      Rectangle2D chartArea = info.getChartArea();

      // // calc title space: will be added later to the right plot size
      // double titleWidth = chartArea.getWidth()-dataArea.getWidth();
      // double titleHeight = chartArea.getHeight()-dataArea.getHeight();

      // calc width and height
      estimatedChartWidth = estimatedChartWidth - dataArea.getWidth() + plotWidth;
      estimatedChartHeight = estimatedChartHeight - dataArea.getHeight() + plotHeight;

      if ((int) lastW == (int) estimatedChartWidth && (int) lastH == (int) estimatedChartHeight)
        break;
      else {
        lastW = estimatedChartWidth;
        lastH = estimatedChartHeight;
      }
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  }

  return new Dimension((int) estimatedChartWidth, (int) estimatedChartHeight);
}
 
Example 15
Source File: ChartLogics.java    From old-mzmine3 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Returns dimensions for limiting factor width or height
 * 
 * @param myChart
 * @return
 */
public static Dimension calcMaxSize(ChartPanel myChart, double chartWidth, double chartHeight) {
  makeChartResizable(myChart);
  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = new JPanel();
  p.removeAll();
  p.add(myChart, BorderLayout.CENTER);
  p.setBounds(myChart.getBounds());
  myChart.paintImmediately(myChart.getBounds());
  p.removeAll();
  parent.add(myChart);

  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();
  Rectangle2D chartArea = info.getChartArea();


  // calc title space: will be added later to the right plot size
  double titleWidth = chartArea.getWidth() - dataArea.getWidth();
  double titleHeight = chartArea.getHeight() - dataArea.getHeight();

  // calculatig width for max height

  // calc right plot size with axis dim.
  // real plot width is given by factor;
  double realPH = chartHeight - titleHeight;

  // ranges
  ValueAxis domainAxis = plot.getDomainAxis();
  org.jfree.data.Range x = domainAxis.getRange();
  ValueAxis rangeAxis = plot.getRangeAxis();
  org.jfree.data.Range y = rangeAxis.getRange();

  // real plot height can be calculated by
  double realPW = realPH / y.getLength() * x.getLength();

  double width = realPW + titleWidth;
  // if width is higher than given chartWidth then calc height for chartWidth
  if (width > chartWidth) {
    // calc right plot size with axis dim.
    // real plot width is given by factor;
    realPW = chartWidth - titleWidth;

    // real plot height can be calculated by
    realPH = realPW / x.getLength() * y.getLength();

    double height = realPH + titleHeight;
    // Return size
    return new Dimension((int) chartWidth, (int) height);
  } else {
    // Return size
    return new Dimension((int) width, (int) chartHeight);
  }
}
 
Example 16
Source File: ChartLogics.java    From old-mzmine3 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * calculates the correct height with multiple iterations Domain and Range axes need to share the
 * same unit (e.g. mm)
 * 
 * @param myChart
 * @param copyToNewPanel
 * @param dataWidth width of data
 * @param axis for width calculation
 * @return
 */
public static double calcHeightToWidth(ChartPanel myChart, double chartWidth,
    double estimatedHeight, int iterations, boolean copyToNewPanel) {
  // if(myChart.getChartRenderingInfo()==null ||
  // myChart.getChartRenderingInfo().getChartArea()==null ||
  // myChart.getChartRenderingInfo().getChartArea().getWidth()==0)
  // result
  double height = estimatedHeight;
  double lastH = height;

  makeChartResizable(myChart);

  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = copyToNewPanel ? new JPanel() : parent;
  if (copyToNewPanel)
    p.add(myChart, BorderLayout.CENTER);
  try {
    for (int i = 0; i < iterations; i++) {
      // paint on ghost panel with estimated height (if copy panel==true)
      myChart.setSize((int) chartWidth, (int) estimatedHeight);
      myChart.paintImmediately(myChart.getBounds());

      XYPlot plot = (XYPlot) myChart.getChart().getPlot();
      ChartRenderingInfo info = myChart.getChartRenderingInfo();
      Rectangle2D dataArea = info.getPlotInfo().getDataArea();
      Rectangle2D chartArea = info.getChartArea();

      // calc title space: will be added later to the right plot size
      double titleWidth = chartArea.getWidth() - dataArea.getWidth();
      double titleHeight = chartArea.getHeight() - dataArea.getHeight();

      // calc right plot size with axis dim.
      // real plot width is given by factor;
      double realPW = chartWidth - titleWidth;

      // ranges
      ValueAxis domainAxis = plot.getDomainAxis();
      org.jfree.data.Range x = domainAxis.getRange();
      ValueAxis rangeAxis = plot.getRangeAxis();
      org.jfree.data.Range y = rangeAxis.getRange();

      // real plot height can be calculated by
      double realPH = realPW / x.getLength() * y.getLength();

      // the real height
      height = realPH + titleHeight;

      // for next iteration
      estimatedHeight = height;
      if ((int) lastH == (int) height)
        break;
      else
        lastH = height;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  }

  if (copyToNewPanel) {
    // reset to frame
    p.removeAll();
    parent.add(myChart);
  }

  return height;
}
 
Example 17
Source File: ChartLogics.java    From old-mzmine3 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Calculates the size of a chart for a given fixed plot width and height
 * 
 * @param chart
 * @param plotWidth
 * @return
 */
public static Dimension calcSizeForPlotSize(ChartPanel myChart, double plotWidth,
    double plotHeight, int iterations) {
  makeChartResizable(myChart);

  // estimate plotwidth / height
  double estimatedChartWidth = plotWidth + 200;
  double estimatedChartHeight = plotHeight + 200;

  double lastW = estimatedChartWidth;
  double lastH = estimatedChartHeight;

  // paint and get closer
  try {
    for (int i = 0; i < iterations; i++) {
      // paint on ghost panel with estimated height (if copy panel==true)
      myChart.setSize((int) estimatedChartWidth, (int) estimatedChartHeight);
      myChart.paintImmediately(myChart.getBounds());

      // rendering info
      ChartRenderingInfo info = myChart.getChartRenderingInfo();
      Rectangle2D dataArea = info.getPlotInfo().getDataArea();
      Rectangle2D chartArea = info.getChartArea();

      // // calc title space: will be added later to the right plot size
      // double titleWidth = chartArea.getWidth()-dataArea.getWidth();
      // double titleHeight = chartArea.getHeight()-dataArea.getHeight();

      // calc width and height
      estimatedChartWidth = estimatedChartWidth - dataArea.getWidth() + plotWidth;
      estimatedChartHeight = estimatedChartHeight - dataArea.getHeight() + plotHeight;

      if ((int) lastW == (int) estimatedChartWidth && (int) lastH == (int) estimatedChartHeight)
        break;
      else {
        lastW = estimatedChartWidth;
        lastH = estimatedChartHeight;
      }
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  }

  return new Dimension((int) estimatedChartWidth, (int) estimatedChartHeight);
}
 
Example 18
Source File: ChartLogics.java    From mzmine3 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Returns dimensions for limiting factor width or height
 * 
 * @param myChart
 * @return
 */
public static Dimension calcMaxSize(ChartPanel myChart, double chartWidth, double chartHeight) {
  makeChartResizable(myChart);
  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = new JPanel();
  p.removeAll();
  p.add(myChart, BorderLayout.CENTER);
  p.setBounds(myChart.getBounds());
  myChart.paintImmediately(myChart.getBounds());
  p.removeAll();
  parent.add(myChart);

  XYPlot plot = (XYPlot) myChart.getChart().getPlot();
  ChartRenderingInfo info = myChart.getChartRenderingInfo();
  Rectangle2D dataArea = info.getPlotInfo().getDataArea();
  Rectangle2D chartArea = info.getChartArea();

  // calc title space: will be added later to the right plot size
  double titleWidth = chartArea.getWidth() - dataArea.getWidth();
  double titleHeight = chartArea.getHeight() - dataArea.getHeight();

  // calculatig width for max height

  // calc right plot size with axis dim.
  // real plot width is given by factor;
  double realPH = chartHeight - titleHeight;

  // ranges
  ValueAxis domainAxis = plot.getDomainAxis();
  org.jfree.data.Range x = domainAxis.getRange();
  ValueAxis rangeAxis = plot.getRangeAxis();
  org.jfree.data.Range y = rangeAxis.getRange();

  // real plot height can be calculated by
  double realPW = realPH / y.getLength() * x.getLength();

  double width = realPW + titleWidth;
  // if width is higher than given chartWidth then calc height for
  // chartWidth
  if (width > chartWidth) {
    // calc right plot size with axis dim.
    // real plot width is given by factor;
    realPW = chartWidth - titleWidth;

    // real plot height can be calculated by
    realPH = realPW / x.getLength() * y.getLength();

    double height = realPH + titleHeight;
    // Return size
    return new Dimension((int) chartWidth, (int) height);
  } else {
    // Return size
    return new Dimension((int) width, (int) chartHeight);
  }
}
 
Example 19
Source File: ChartLogics.java    From mzmine3 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * calculates the correct height with multiple iterations Domain and Range axes need to share the
 * same unit (e.g. mm)
 * 
 * @param myChart
 * @param copyToNewPanel
 * @param dataWidth width of data
 * @param axis for width calculation
 * @return
 */
public static double calcHeightToWidth(ChartPanel myChart, double chartWidth,
    double estimatedHeight, int iterations, boolean copyToNewPanel) {
  // if(myChart.getChartRenderingInfo()==null ||
  // myChart.getChartRenderingInfo().getChartArea()==null ||
  // myChart.getChartRenderingInfo().getChartArea().getWidth()==0)
  // result
  double height = estimatedHeight;
  double lastH = height;

  makeChartResizable(myChart);

  // paint on a ghost panel
  JPanel parent = (JPanel) myChart.getParent();
  JPanel p = copyToNewPanel ? new JPanel() : parent;
  if (copyToNewPanel)
    p.add(myChart, BorderLayout.CENTER);
  try {
    for (int i = 0; i < iterations; i++) {
      // paint on ghost panel with estimated height (if copy
      // panel==true)
      myChart.setSize((int) chartWidth, (int) estimatedHeight);
      myChart.paintImmediately(myChart.getBounds());

      XYPlot plot = (XYPlot) myChart.getChart().getPlot();
      ChartRenderingInfo info = myChart.getChartRenderingInfo();
      Rectangle2D dataArea = info.getPlotInfo().getDataArea();
      Rectangle2D chartArea = info.getChartArea();

      // calc title space: will be added later to the right plot size
      double titleWidth = chartArea.getWidth() - dataArea.getWidth();
      double titleHeight = chartArea.getHeight() - dataArea.getHeight();

      // calc right plot size with axis dim.
      // real plot width is given by factor;
      double realPW = chartWidth - titleWidth;

      // ranges
      ValueAxis domainAxis = plot.getDomainAxis();
      org.jfree.data.Range x = domainAxis.getRange();
      ValueAxis rangeAxis = plot.getRangeAxis();
      org.jfree.data.Range y = rangeAxis.getRange();

      // real plot height can be calculated by
      double realPH = realPW / x.getLength() * y.getLength();

      // the real height
      height = realPH + titleHeight;

      // for next iteration
      estimatedHeight = height;
      if ((int) lastH == (int) height)
        break;
      else
        lastH = height;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  }

  if (copyToNewPanel) {
    // reset to frame
    p.removeAll();
    parent.add(myChart);
  }

  return height;
}
 
Example 20
Source File: ChartLogics.java    From mzmine3 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Calculates the size of a chart for a given fixed plot width and height
 * 
 * @param chart
 * @param plotWidth
 * @return
 */
public static Dimension calcSizeForPlotSize(ChartPanel myChart, double plotWidth,
    double plotHeight, int iterations) {
  makeChartResizable(myChart);

  // estimate plotwidth / height
  double estimatedChartWidth = plotWidth + 200;
  double estimatedChartHeight = plotHeight + 200;

  double lastW = estimatedChartWidth;
  double lastH = estimatedChartHeight;

  // paint and get closer
  try {
    for (int i = 0; i < iterations; i++) {
      // paint on ghost panel with estimated height (if copy
      // panel==true)
      myChart.setSize((int) estimatedChartWidth, (int) estimatedChartHeight);
      myChart.paintImmediately(myChart.getBounds());

      // rendering info
      ChartRenderingInfo info = myChart.getChartRenderingInfo();
      Rectangle2D dataArea = info.getPlotInfo().getDataArea();
      Rectangle2D chartArea = info.getChartArea();

      // // calc title space: will be added later to the right plot
      // size
      // double titleWidth = chartArea.getWidth()-dataArea.getWidth();
      // double titleHeight =
      // chartArea.getHeight()-dataArea.getHeight();

      // calc width and height
      estimatedChartWidth = estimatedChartWidth - dataArea.getWidth() + plotWidth;
      estimatedChartHeight = estimatedChartHeight - dataArea.getHeight() + plotHeight;

      if ((int) lastW == (int) estimatedChartWidth && (int) lastH == (int) estimatedChartHeight)
        break;
      else {
        lastW = estimatedChartWidth;
        lastH = estimatedChartHeight;
      }
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  }

  return new Dimension((int) estimatedChartWidth, (int) estimatedChartHeight);
}