/* * AAnnotationContentComponent.java of project jchart2d, a special * JComponent for rendering annotation content. * Copyright (C) 2002 - 2011, Achim Westermann, created on 02.02.2009 * * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * If you modify or optimize the code in a useful way please let me know. * Achim.Westermann@gmx.de * * * File : $Source: /cvsroot/jchart2d/jchart2d/src/info/monitorenter/gui/chart/annotations/AAnnotationContentComponent.java,v $ * Date : $Date: 2011/01/14 08:36:11 $ * Version: $Revision: 1.6 $ */ package info.monitorenter.gui.chart.annotations; import java.awt.Graphics; import info.monitorenter.gui.chart.Chart2D; import info.monitorenter.gui.chart.ITrace2D; import info.monitorenter.gui.chart.ITracePoint2D; import javax.swing.JPanel; /** * * A special <code>{@link javax.swing.JComponent}</code> for rendering * annotation content. * <p> * * The methods <code>{@link #paint(java.awt.Graphics)}</code> and * <code>{@link #paintComponents(java.awt.Graphics)}</code> are finalized to * enforce implementations to use * <code>{@link #paintAnnotation(Graphics, Chart2D, ITrace2D, ITracePoint2D)}</code> for * custom rendering. The finalized methods will invoke the latter method with * the appropriate parameters. * <p> * * The visible annotation that will contain this "content panel" will respect * the method <code>{@link #getPreferredSize()}</code> of implementations and * enlarge it's bounds to guarantee that all content is shown. * <p> * * @author <a href="achim.westermann@gmx.de">Achim Westermann</a> * */ public abstract class AAnnotationContentComponent extends JPanel { /** * The trace point this annotation is related to. * <p> */ private ITracePoint2D m_annotatedPoint; /** Generated <code>serialVersionUID</code>. **/ private static final long serialVersionUID = 3147218476248666442L; /** * Creates an instance that is related to the given point to annotate. * <p> * * @param point * the point to annotate. */ public AAnnotationContentComponent(final ITracePoint2D point) { this.m_annotatedPoint = point; } /** * Returns the annotatedPoint. * <p> * * @return the annotatedPoint */ public final synchronized ITracePoint2D getAnnotatedPoint() { return this.m_annotatedPoint; } /** * Finalized to enforce using * <code>{@link #paintAnnotation(Graphics, Chart2D, ITrace2D, ITracePoint2D)}</code>. * * @see javax.swing.JComponent#paint(java.awt.Graphics) */ @Override public final synchronized void paint(final Graphics g) { super.paint(g); } /** * Paint this annotation for the given chart, trace and point. * <p> * The arguments may help to render information about the point that is * annotated. * <p> * * @param g * the graphics context. * * @param chart * the chart to annotate. * * @param trace * the trace to annotate. * * @param point * the point to annotate. */ public abstract void paintAnnotation(Graphics g, Chart2D chart, ITrace2D trace, ITracePoint2D point); /** * Finalized to enforce using * <code>{@link #paintAnnotation(Graphics, Chart2D, ITrace2D, ITracePoint2D)}</code>. * * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) */ @Override protected final synchronized void paintComponent(final Graphics g) { super.paintComponent(g); // NPE candidate, but must never be null by contract. So exceptions are // welcome to fix programming errors. ITrace2D trace = this.m_annotatedPoint.getListener(); Chart2D chart = trace.getRenderer(); this.paintAnnotation(g, chart, trace, this.m_annotatedPoint); } /** * Sets the annotatedPoint. * <p> * * @param annotatedPoint * the annotatedPoint to set */ public final synchronized void setAnnotatedPoint(final ITracePoint2D annotatedPoint) { this.m_annotatedPoint = annotatedPoint; // Potential NPE, but this is considered a programming error so exceptions // are welcome: Chart2D chart = this.m_annotatedPoint.getListener().getRenderer(); chart.setRequestedRepaint(true); } }