public boolean render(Graphics2D g2,Rectangle2D dataArea,int index,PlotRenderingInfo info,CategoryCrosshairState crosshairState){
  boolean foundData=false;
  CategoryDataset currentDataset=getDataset(index);
  CategoryItemRenderer renderer=getRenderer(index);
  CategoryAxis domainAxis=getDomainAxisForDataset(index);
  ValueAxis rangeAxis=getRangeAxisForDataset(index);
  boolean hasData=!DatasetUtilities.isEmptyOrNull(currentDataset);
  if (hasData && renderer != null) {
    foundData=true;
    CategoryItemRendererState state=renderer.initialise(g2,dataArea,this,index,info);
    state.setCrosshairState(crosshairState);
    int columnCount=currentDataset.getColumnCount();
    int rowCount=currentDataset.getRowCount();
    int passCount=renderer.getPassCount();
    for (int pass=0; pass < passCount; pass++) {
      if (this.columnRenderingOrder == SortOrder.ASCENDING) {
        for (int column=0; column < columnCount; column++) {
          if (this.rowRenderingOrder == SortOrder.ASCENDING) {
            for (int row=0; row < rowCount; row++) {
              renderer.drawItem(g2,state,dataArea,this,domainAxis,rangeAxis,currentDataset,row,column,pass);
            }
          }
 else {
            for (int row=rowCount - 1; row >= 0; row--) {
              renderer.drawItem(g2,state,dataArea,this,domainAxis,rangeAxis,currentDataset,row,column,pass);
            }
          }
        }
      }
 else {
        for (int column=columnCount - 1; column >= 0; column--) {
          if (this.rowRenderingOrder == SortOrder.ASCENDING) {
            for (int row=0; row < rowCount; row++) {
              renderer.drawItem(g2,state,dataArea,this,domainAxis,rangeAxis,currentDataset,row,column,pass);
            }
          }
 else {
            for (int row=rowCount - 1; row >= 0; row--) {
              renderer.drawItem(g2,state,dataArea,this,domainAxis,rangeAxis,currentDataset,row,column,pass);
            }
          }
        }
      }
    }
  }
  return foundData;
}

public boolean render ( Graphics2D g2 , Rectangle2D dataArea , int index , PlotRenderingInfo info , CategoryCrosshairState crosshairState ) { boolean foundData = false ; CategoryDataset currentDataset = getDataset ( index ) ; CategoryItemRenderer renderer = getRenderer ( index ) ; CategoryAxis domainAxis = getDomainAxisForDataset ( index ) ; ValueAxis rangeAxis = getRangeAxisForDataset ( index ) ; boolean hasData = ! DatasetUtilities . isEmptyOrNull ( currentDataset ) ; if ( hasData && renderer != null ) { foundData = true ; CategoryItemRendererState state = renderer . initialise ( g2 , dataArea , this , index , info ) ; state . setCrosshairState ( crosshairState ) ; int columnCount = currentDataset . getColumnCount ( ) ; int rowCount = currentDataset . getRowCount ( ) ; int passCount = renderer . getPassCount ( ) ; for ( int pass = 0 ; pass < passCount ; pass ++ ) { if ( this . columnRenderingOrder == SortOrder . ASCENDING ) { for ( int column = 0 ; column < columnCount ; column ++ ) { if ( this . rowRenderingOrder == SortOrder . ASCENDING ) { for ( int row = 0 ; row < rowCount ; row ++ ) { renderer . drawItem ( g2 , state , dataArea , this , domainAxis , rangeAxis , currentDataset , row , column , pass ) ; } } else { for ( int row = rowCount - 1 ; row >= 0 ; row -- ) { renderer . drawItem ( g2 , state , dataArea , this , domainAxis , rangeAxis , currentDataset , row , column , pass ) ; } } } } else { for ( int column = columnCount - 1 ; column >= 0 ; column -- ) { if ( this . rowRenderingOrder == SortOrder . ASCENDING ) { for ( int row = 0 ; row < rowCount ; row ++ ) { renderer . drawItem ( g2 , state , dataArea , this , domainAxis , rangeAxis , currentDataset , row , column , pass ) ; } } else { for ( int row = rowCount - 1 ; row >= 0 ; row -- ) { renderer . drawItem ( g2 , state , dataArea , this , domainAxis , rangeAxis , currentDataset , row , column , pass ) ; } } } } } } return foundData ; }
draws a representation of a dataset within the dataarea region using the appropriate renderer .
