@Override public void drawDomainMarker(Graphics2D g2,XYPlot plot,ValueAxis domainAxis,Marker marker,Rectangle2D dataArea){
  if (marker instanceof ValueMarker) {
    ValueMarker vm=(ValueMarker)marker;
    double value=vm.getValue();
    Range range=domainAxis.getRange();
    if (!range.contains(value)) {
      return;
    }
    double v=domainAxis.valueToJava2D(value,dataArea,plot.getDomainAxisEdge());
    PlotOrientation orientation=plot.getOrientation();
    Line2D line=null;
    if (orientation == PlotOrientation.HORIZONTAL) {
      line=new Line2D.Double(dataArea.getMinX(),v,dataArea.getMaxX(),v);
    }
 else     if (orientation == PlotOrientation.VERTICAL) {
      line=new Line2D.Double(v,dataArea.getMinY(),v,dataArea.getMaxY());
    }
 else {
      throw new IllegalStateException("Unrecognised orientation.");
    }
    final Composite originalComposite=g2.getComposite();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,marker.getAlpha()));
    g2.setPaint(marker.getPaint());
    g2.setStroke(marker.getStroke());
    g2.draw(line);
    String label=marker.getLabel();
    RectangleAnchor anchor=marker.getLabelAnchor();
    if (label != null) {
      Font labelFont=marker.getLabelFont();
      g2.setFont(labelFont);
      Point2D coords=calculateDomainMarkerTextAnchorPoint(g2,orientation,dataArea,line.getBounds2D(),marker.getLabelOffset(),LengthAdjustmentType.EXPAND,anchor);
      Rectangle2D r=TextUtils.calcAlignedStringBounds(label,g2,(float)coords.getX(),(float)coords.getY(),marker.getLabelTextAnchor());
      g2.setPaint(marker.getLabelBackgroundColor());
      g2.fill(r);
      g2.setPaint(marker.getLabelPaint());
      TextUtils.drawAlignedString(label,g2,(float)coords.getX(),(float)coords.getY(),marker.getLabelTextAnchor());
    }
    g2.setComposite(originalComposite);
  }
 else   if (marker instanceof IntervalMarker) {
    IntervalMarker im=(IntervalMarker)marker;
    double start=im.getStartValue();
    double end=im.getEndValue();
    Range range=domainAxis.getRange();
    if (!(range.intersects(start,end))) {
      return;
    }
    double start2d=domainAxis.valueToJava2D(start,dataArea,plot.getDomainAxisEdge());
    double end2d=domainAxis.valueToJava2D(end,dataArea,plot.getDomainAxisEdge());
    double low=Math.min(start2d,end2d);
    double high=Math.max(start2d,end2d);
    PlotOrientation orientation=plot.getOrientation();
    Rectangle2D rect=null;
    if (orientation == PlotOrientation.HORIZONTAL) {
      low=Math.max(low,dataArea.getMinY());
      high=Math.min(high,dataArea.getMaxY());
      rect=new Rectangle2D.Double(dataArea.getMinX(),low,dataArea.getWidth(),high - low);
    }
 else     if (orientation == PlotOrientation.VERTICAL) {
      low=Math.max(low,dataArea.getMinX());
      high=Math.min(high,dataArea.getMaxX());
      rect=new Rectangle2D.Double(low,dataArea.getMinY(),high - low,dataArea.getHeight());
    }
    final Composite originalComposite=g2.getComposite();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,marker.getAlpha()));
    Paint p=marker.getPaint();
    if (p instanceof GradientPaint) {
      GradientPaint gp=(GradientPaint)p;
      GradientPaintTransformer t=im.getGradientPaintTransformer();
      if (t != null) {
        gp=t.transform(gp,rect);
      }
      g2.setPaint(gp);
    }
 else {
      g2.setPaint(p);
    }
    g2.fill(rect);
    if (im.getOutlinePaint() != null && im.getOutlineStroke() != null) {
      if (orientation == PlotOrientation.VERTICAL) {
        Line2D line=new Line2D.Double();
        double y0=dataArea.getMinY();
        double y1=dataArea.getMaxY();
        g2.setPaint(im.getOutlinePaint());
        g2.setStroke(im.getOutlineStroke());
        if (range.contains(start)) {
          line.setLine(start2d,y0,start2d,y1);
          g2.draw(line);
        }
        if (range.contains(end)) {
          line.setLine(end2d,y0,end2d,y1);
          g2.draw(line);
        }
      }
 else {
        Line2D line=new Line2D.Double();
        double x0=dataArea.getMinX();
        double x1=dataArea.getMaxX();
        g2.setPaint(im.getOutlinePaint());
        g2.setStroke(im.getOutlineStroke());
        if (range.contains(start)) {
          line.setLine(x0,start2d,x1,start2d);
          g2.draw(line);
        }
        if (range.contains(end)) {
          line.setLine(x0,end2d,x1,end2d);
          g2.draw(line);
        }
      }
    }
    String label=marker.getLabel();
    RectangleAnchor anchor=marker.getLabelAnchor();
    if (label != null) {
      Font labelFont=marker.getLabelFont();
      g2.setFont(labelFont);
      Point2D coords=calculateDomainMarkerTextAnchorPoint(g2,orientation,dataArea,rect,marker.getLabelOffset(),marker.getLabelOffsetType(),anchor);
      Rectangle2D r=TextUtils.calcAlignedStringBounds(label,g2,(float)coords.getX(),(float)coords.getY(),marker.getLabelTextAnchor());
      g2.setPaint(marker.getLabelBackgroundColor());
      g2.fill(r);
      g2.setPaint(marker.getLabelPaint());
      TextUtilities.drawAlignedString(label,g2,(float)coords.getX(),(float)coords.getY(),marker.getLabelTextAnchor());
    }
    g2.setComposite(originalComposite);
  }
}

@ Override public void drawDomainMarker ( Graphics2D g2 , XYPlot plot , ValueAxis domainAxis , Marker marker , Rectangle2D dataArea ) { if ( marker instanceof ValueMarker ) { ValueMarker vm = ( ValueMarker ) marker ; double value = vm . getValue ( ) ; Range range = domainAxis . getRange ( ) ; if ( ! range . contains ( value ) ) { return ; } double v = domainAxis . valueToJava2D ( value , dataArea , plot . getDomainAxisEdge ( ) ) ; PlotOrientation orientation = plot . getOrientation ( ) ; Line2D line = null ; if ( orientation == PlotOrientation . HORIZONTAL ) { line = new Line2D . Double ( dataArea . getMinX ( ) , v , dataArea . getMaxX ( ) , v ) ; } else if ( orientation == PlotOrientation . VERTICAL ) { line = new Line2D . Double ( v , dataArea . getMinY ( ) , v , dataArea . getMaxY ( ) ) ; } else { throw new IllegalStateException ( "Unrecognised orientation." ) ; } final Composite originalComposite = g2 . getComposite ( ) ; g2 . setComposite ( AlphaComposite . getInstance ( AlphaComposite . SRC_OVER , marker . getAlpha ( ) ) ) ; g2 . setPaint ( marker . getPaint ( ) ) ; g2 . setStroke ( marker . getStroke ( ) ) ; g2 . draw ( line ) ; String label = marker . getLabel ( ) ; RectangleAnchor anchor = marker . getLabelAnchor ( ) ; if ( label != null ) { Font labelFont = marker . getLabelFont ( ) ; g2 . setFont ( labelFont ) ; Point2D coords = calculateDomainMarkerTextAnchorPoint ( g2 , orientation , dataArea , line . getBounds2D ( ) , marker . getLabelOffset ( ) , LengthAdjustmentType . EXPAND , anchor ) ; Rectangle2D r = TextUtils . calcAlignedStringBounds ( label , g2 , ( float ) coords . getX ( ) , ( float ) coords . getY ( ) , marker . getLabelTextAnchor ( ) ) ; g2 . setPaint ( marker . getLabelBackgroundColor ( ) ) ; g2 . fill ( r ) ; g2 . setPaint ( marker . getLabelPaint ( ) ) ; TextUtils . drawAlignedString ( label , g2 , ( float ) coords . getX ( ) , ( float ) coords . getY ( ) , marker . getLabelTextAnchor ( ) ) ; } g2 . setComposite ( originalComposite ) ; } else if ( marker instanceof IntervalMarker ) { IntervalMarker im = ( IntervalMarker ) marker ; double start = im . getStartValue ( ) ; double end = im . getEndValue ( ) ; Range range = domainAxis . getRange ( ) ; if ( ! ( range . intersects ( start , end ) ) ) { return ; } double start2d = domainAxis . valueToJava2D ( start , dataArea , plot . getDomainAxisEdge ( ) ) ; double end2d = domainAxis . valueToJava2D ( end , dataArea , plot . getDomainAxisEdge ( ) ) ; double low = Math . min ( start2d , end2d ) ; double high = Math . max ( start2d , end2d ) ; PlotOrientation orientation = plot . getOrientation ( ) ; Rectangle2D rect = null ; if ( orientation == PlotOrientation . HORIZONTAL ) { low = Math . max ( low , dataArea . getMinY ( ) ) ; high = Math . min ( high , dataArea . getMaxY ( ) ) ; rect = new Rectangle2D . Double ( dataArea . getMinX ( ) , low , dataArea . getWidth ( ) , high - low ) ; } else if ( orientation == PlotOrientation . VERTICAL ) { low = Math . max ( low , dataArea . getMinX ( ) ) ; high = Math . min ( high , dataArea . getMaxX ( ) ) ; rect = new Rectangle2D . Double ( low , dataArea . getMinY ( ) , high - low , dataArea . getHeight ( ) ) ; } final Composite originalComposite = g2 . getComposite ( ) ; g2 . setComposite ( AlphaComposite . getInstance ( AlphaComposite . SRC_OVER , marker . getAlpha ( ) ) ) ; Paint p = marker . getPaint ( ) ; if ( p instanceof GradientPaint ) { GradientPaint gp = ( GradientPaint ) p ; GradientPaintTransformer t = im . getGradientPaintTransformer ( ) ; if ( t != null ) { gp = t . transform ( gp , rect ) ; } g2 . setPaint ( gp ) ; } else { g2 . setPaint ( p ) ; } g2 . fill ( rect ) ; if ( im . getOutlinePaint ( ) != null && im . getOutlineStroke ( ) != null ) { if ( orientation == PlotOrientation . VERTICAL ) { Line2D line = new Line2D . Double ( ) ; double y0 = dataArea . getMinY ( ) ; double y1 = dataArea . getMaxY ( ) ; g2 . setPaint ( im . getOutlinePaint ( ) ) ; g2 . setStroke ( im . getOutlineStroke ( ) ) ; if ( range . contains ( start ) ) { line . setLine ( start2d , y0 , start2d , y1 ) ; g2 . draw ( line ) ; } if ( range . contains ( end ) ) { line . setLine ( end2d , y0 , end2d , y1 ) ; g2 . draw ( line ) ; } } else { Line2D line = new Line2D . Double ( ) ; double x0 = dataArea . getMinX ( ) ; double x1 = dataArea . getMaxX ( ) ; g2 . setPaint ( im . getOutlinePaint ( ) ) ; g2 . setStroke ( im . getOutlineStroke ( ) ) ; if ( range . contains ( start ) ) { line . setLine ( x0 , start2d , x1 , start2d ) ; g2 . draw ( line ) ; } if ( range . contains ( end ) ) { line . setLine ( x0 , end2d , x1 , end2d ) ; g2 . draw ( line ) ; } } } String label = marker . getLabel ( ) ; RectangleAnchor anchor = marker . getLabelAnchor ( ) ; if ( label != null ) { Font labelFont = marker . getLabelFont ( ) ; g2 . setFont ( labelFont ) ; Point2D coords = calculateDomainMarkerTextAnchorPoint ( g2 , orientation , dataArea , rect , marker . getLabelOffset ( ) , marker . getLabelOffsetType ( ) , anchor ) ; Rectangle2D r = TextUtils . calcAlignedStringBounds ( label , g2 , ( float ) coords . getX ( ) , ( float ) coords . getY ( ) , marker . getLabelTextAnchor ( ) ) ; g2 . setPaint ( marker . getLabelBackgroundColor ( ) ) ; g2 . fill ( r ) ; g2 . setPaint ( marker . getLabelPaint ( ) ) ; TextUtilities . drawAlignedString ( label , g2 , ( float ) coords . getX ( ) , ( float ) coords . getY ( ) , marker . getLabelTextAnchor ( ) ) ; } g2 . setComposite ( originalComposite ) ; } }
draws a line on the chart perpendicular to the x - axis to mark a value or range of values .
