package org.chartsy.main; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import java.awt.LayoutManager; import java.io.Serializable; import javax.swing.BorderFactory; import javax.swing.JLayeredPane; import org.chartsy.main.axis.DateAxis; import org.chartsy.main.axis.Grid; import org.chartsy.main.axis.PriceAxis; import org.chartsy.main.data.ChartData; import org.chartsy.main.utils.SerialVersion; /** * * @author viorel.gheba */ public class MainPanel extends JLayeredPane implements Serializable { private static final long serialVersionUID = SerialVersion.APPVERSION; private ChartFrame chartFrame; private ChartSplitPanel sPane; private Grid grid; private DateAxis dateAxis; private PriceAxis priceAxis; public MainPanel(ChartFrame frame) { chartFrame = frame; sPane = new ChartSplitPanel(chartFrame); grid = new Grid(chartFrame); dateAxis = new DateAxis(chartFrame); priceAxis = new PriceAxis(chartFrame); setOpaque(true); setBackground(chartFrame.getChartProperties().getBackgroundColor()); setBorder(BorderFactory.createEmptyBorder(2, 20, 0, 0)); setLayout(new LayoutManager() { public void addLayoutComponent(String name, Component comp) {} public void removeLayoutComponent(Component comp) {} public Dimension preferredLayoutSize(Container parent) {return new Dimension(0, 0);} public Dimension minimumLayoutSize(Container parent) {return new Dimension(0, 0);} public void layoutContainer(Container parent) { int right = (int)ChartData.dataOffset.right; int bottom = (int)ChartData.dataOffset.bottom; Insets insets = parent.getInsets(); int w = parent.getWidth() - insets.left - insets.right - right; int h = parent.getHeight() - insets.top - insets.bottom - bottom; grid.setBounds(insets.left, insets.top, w, h); dateAxis.setBounds(insets.left, insets.top + h, w, bottom); priceAxis.setBounds(insets.left + insets.right + w, insets.top, right, insets.top + insets.bottom + h); sPane.setBounds(insets.left, insets.top, w, h); } }); add(sPane); add(dateAxis); add(priceAxis); add(grid); putClientProperty("print.printable", Boolean.TRUE); putClientProperty("print.name", ""); } public ChartSplitPanel getSplitPanel() { return sPane; } @Override public void paint(Graphics g) { chartFrame.getChartData().calculate(chartFrame); chartFrame.getChartData().calculateRange(chartFrame, sPane.getChartPanel().getOverlays()); setBackground(chartFrame.getChartProperties().getBackgroundColor()); super.paint(g); } }