question: @ Override public void drawRangeMarker ( Graphics2D g2 , XYPlot plot , ValueAxis rangeAxis , Marker marker , Rectangle2D dataArea ) { if ( marker instanceof ValueMarker ) { ValueMarker vm = ( ValueMarker ) marker ; double value = vm . getValue ( ) ; Range range = rangeAxis . getRange ( ) ; if ( ! range . contains ( value ) ) { return ; } double v = rangeAxis . valueToJava2D ( value , dataArea , plot . getRangeAxisEdge ( ) ) ; PlotOrientation orientation = plot . getOrientation ( ) ; Line2D line = null ; if ( orientation == PlotOrientation . HORIZONTAL ) { line = new Line2D . Double ( v , dataArea . getMinY ( ) , v , dataArea . getMaxY ( ) ) ; } else if ( orientation == PlotOrientation . VERTICAL ) { line = new Line2D . Double ( dataArea . getMinX ( ) , v , dataArea . getMaxX ( ) , v ) ; } 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 = calculateRangeMarkerTextAnchorPoint ( 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 ( ) ) ; TextUtilities . 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 = rangeAxis . getRange ( ) ; if ( ! ( range . intersects ( start , end ) ) ) { return ; } double start2d = rangeAxis . valueToJava2D ( start , dataArea , plot . getRangeAxisEdge ( ) ) ; double end2d = rangeAxis . valueToJava2D ( end , dataArea , plot . getRangeAxisEdge ( ) ) ; 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 . getMinX ( ) ) ; high = Math . min ( high , dataArea . getMaxX ( ) ) ; rect = new Rectangle2D . Double ( low , dataArea . getMinY ( ) , high - low , dataArea . getHeight ( ) ) ; } else if ( orientation == PlotOrientation . VERTICAL ) { low = Math . max ( low , dataArea . getMinY ( ) ) ; high = Math . min ( high , dataArea . getMaxY ( ) ) ; rect = new Rectangle2D . Double ( dataArea . getMinX ( ) , low , dataArea . getWidth ( ) , high - low ) ; } 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 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 ) ; } } else { 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 ) ; } } } String label = marker . getLabel ( ) ; RectangleAnchor anchor = marker . getLabelAnchor ( ) ; if ( label != null ) { Font labelFont = marker . getLabelFont ( ) ; g2 . setFont ( labelFont ) ; Point2D coords = calculateRangeMarkerTextAnchorPoint ( 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 ) ; } }
target:  Draws a line on the chart perpendicular to the y-axis to mark a value or range of values.