BBjChart

Description

In BBj 7.0 and higher, BBjChart is an abstract class that acts as the base class for BBjCommonChart and BBjGenericChart.

Extended Interfaces

DropTarget, Focusable, TabTraversable

Creation

BBjAPI > BBjSysGui > BBjWindow > BBjChart

A BBjChart is an abstract class and can not be instantiated.

Methods of BBjChart

Return Value

Method

JFreeChart@

getClientChart()

ClientChartPanel@

getClientChartPanel()

void

writePNGToServer(string filename)

void

writePNGToServer(string filename, boolean writeAlpha, int compression)

void

writePNGToServer(string filename, int width, int height, boolean writeAlpha, int compression)

Methods of BBjBarChart implemented for DropTarget

Return Value

Method

int

getDropActions()

void

setDropActions(int actions)

BBjVector

getDropTypes()

void

setDropTypes(BBjVector types)

Methods of BBjChart implemented for Focusable

Return Value

Method

boolean

isFocusable()

void

setFocusable(boolean p_focus)

Methods of BBjChart implemented for TabTraversable

Return Value

Method

boolean

isTabTraversable()

void

setTabTraversable(boolean trav)

Methods of BBjChart inherited from BBjControl

Events

Callback Code

Object-oriented Event

Read Record Event

Code

ON_DROP_TARGET_DROP

BBjDropTargetDropEvent

Drop Target Drop Event

D

ON_GAINED_FOCUS

BBjGainedFocusEvent

Control Focus Gained/Lost Event

f

ON_LOST_FOCUS

BBjLostFocusEvent

Control Focus Gained/Lost Event

f

ON_MOUSE_ENTER

BBjMouseEnterEvent

Mouse Enter/Exit Event

E

ON_MOUSE_EXIT

BBjMouseExitEvent

Mouse Enter/Exit Event

E

ON_POPUP_REQUEST

BBjPopupRequestEvent

Popup Request Event

r

ON_RIGHT_MOUSE_DOWN

BBjRightMouseDownEvent

Right Mouse Button Down Event

R

Remarks

None.

Constants inherited from BBjControl

Example

Copy

BBjChart Example

use java.awt.BasicStroke
use java.text.SimpleDateFormat
use org.jfree.data.xy.XYDataset
use org.jfree.data.xy.XYSeries
use org.jfree.chart.axis.DateTickUnit
use org.jfree.chart.JFreeChart
use org.jfree.chart.ChartFactory
use org.jfree.chart.ChartPanel
use org.jfree.chart.plot.XYPlot
use org.jfree.data.xy.XYSeriesCollection
use org.jfree.data.time.TimeSeries
use org.jfree.data.time.TimeSeriesCollection
use org.jfree.data.time.Day
use org.jfree.chart.renderer.xy.XYLineAndShapeRenderer

rem =====
rem Setup
rem =====

sysgui = unt
open (sysgui)"X0"
web = info(3,6)="5" or info(3,6)="6"
x=50,y=50,w=1050,h=600; if web then x=0,y=0
sysgui! = bbjapi().getSysGui()
window! = sysgui!.addWindow(x,y,w,h,"BBjChart Samples",$00090003$)
window!.setCallback(window!.ON_CLOSE,"eoj")

showLegend = 1
is3d = 1

showLegend = 1; rem msgbox("Show Legend?",4+32)=6
is3d = 1; rem msgbox("3d Pie Chart?",4+32)=6

rem ===========
rem BBjPieChart
rem ===========

pieChart! = window!.addPieChart(101,10,10,500,270,showLegend,is3d)
pieChart!.setBackColor(window!.getBackColor())
pieChart!.setToolTipText("BBjPieChart")
pieChart!.setTitle("Receipts by Geographic Area")
pieChart!.setSliceValue("Western Europe",43.2)
pieChart!.setSliceValue("Mexico",10)
pieChart!.setSliceValue("Pacific Rim",17.5)
pieChart!.setSliceValue("Eastern Europe",15.2)
pieChart!.setSliceValue("U.S",32.5)
pieChart!.setSliceValue("Other",6)

pieChart!.setCallback(sysgui!.ON_GAINED_FOCUS,"event")
pieChart!.setCallback(sysgui!.ON_LOST_FOCUS,"event")
pieChart!.setCallback(sysgui!.ON_MOUSE_ENTER,"event")
pieChart!.setCallback(sysgui!.ON_MOUSE_EXIT,"event")
pieChart!.setCallback(sysgui!.ON_POPUP_REQUEST,"event")
pieChart!.setCallback(sysgui!.ON_RIGHT_MOUSE_DOWN,"event")

flags$ = iff(showLegend,$0004$,$0000$)
pieChartLegend! = window!.addCheckBox(102,10,280,500,20,"Pie Chart Legend",flags$)
pieChartLegend!.setCallback(pieChartLegend!.ON_CHECK_ON,"pieChartLegendOn")
pieChartLegend!.setCallback(pieChartLegend!.ON_CHECK_OFF,"pieChartLegendOff")

print "BBjPieChart::is3D ",pieChart!.is3D()
print "BBjPieChart::isLegendShown ",pieChart!.isLegendShown()

rem ===========
rem BBjBarChart
rem ===========

barChart! = window!.addBarChart(103,10,300,500,270,"Fruit","Value",3,5,showLegend,is3d,0)
barChart!.setBackColor(window!.getBackColor())
barChart!.setToolTipText("BBjBarChart")
barChart!.setTitle("Travel Expense by Region")
barChart!.setSeriesName(0,"Europe")
barChart!.setSeriesName(1,"U.S.")
barChart!.setSeriesName(1,"U.S.A.")
barChart!.setSeriesName(2,"Other")
barChart!.setCategoryName(0,"2018")
barChart!.setCategoryName(1,"2019")
barChart!.setCategoryName(2,"2020")
barChart!.setCategoryName(3,"2021")
barChart!.setCategoryName(4,"2022 (est)")
barChart!.setBarValue(0,0,1)
barChart!.setBarValue(0,1,4)
barChart!.setBarValue(0,2,3)
barChart!.setBarValue(0,3,5)
barChart!.setBarValue(0,4,5)
barChart!.setBarValue(1,0,5)
barChart!.setBarValue(1,1,7)
barChart!.setBarValue(1,2,6)
barChart!.setBarValue(1,3,8)
barChart!.setBarValue(1,4,4)
barChart!.setBarValue(2,0,4)
barChart!.setBarValue(2,1,3)
barChart!.setBarValue(2,2,2)
barChart!.setBarValue(2,3,3)
barChart!.setBarValue(2,4,6)

barChart!.setCallback(sysgui!.ON_GAINED_FOCUS,"event")
barChart!.setCallback(sysgui!.ON_LOST_FOCUS,"event")
barChart!.setCallback(sysgui!.ON_MOUSE_ENTER,"event")
barChart!.setCallback(sysgui!.ON_MOUSE_EXIT,"event")
barChart!.setCallback(sysgui!.ON_POPUP_REQUEST,"event")
barChart!.setCallback(sysgui!.ON_RIGHT_MOUSE_DOWN,"event")

flags$ = iff(showLegend,$0004$,$0000$)
barChartLegend! = window!.addCheckBox(104,10,570,500,20,"Bar Chart Legend",flags$)
barChartLegend!.setCallback(barChartLegend!.ON_CHECK_ON,"barChartLegendOn")
barChartLegend!.setCallback(barChartLegend!.ON_CHECK_OFF,"barChartLegendOff")

print "BBjBarChart::is3D ",barChart!.is3D()
print "BBjBarChart::isLegendShown ",barChart!.isLegendShown()

rem ============
rem BBjLineChart
rem ============

if 0 then
rem if msgbox("Scrolling Line Chart?",4+32,"Scrollbars") = 6 then
   rem ' this puts it on a scrollable child window
   scrollingLineChart! = window!.addChildWindow(105,520,10,1000,270,"",$000100804$,1)
   scrollingLineChart!.setTrack(0)
   scrollingLineChart!.setSize(500,270)
   lineChart! = scrollingLineChart!.addLineChart(105,0,0,1000,270,"x","y",2,showLegend)
else
   rem ' this puts it directly on the main window
   lineChart! = window!.addLineChart(105,520,10,500,270,"x","y",2,showLegend)
endif

lineChart!.setBackColor(window!.getBackColor())
lineChart!.setToolTipText("BBjLineChart")
lineChart!.setTitle("Noise levels")
lineChart!.setSeriesName(0,"High frequency")
lineChart!.setSeriesName(1,"Low frequency")
for i = 1 to 200
  x = i/10 - 10
  y = Math.cos(x)
  z = Math.sin(x) * 2
  lineChart!.setXYValue(0,x,y)
  lineChart!.setXYValue(1,x,z)
next i

lineChart!.setCallback(sysgui!.ON_GAINED_FOCUS,"event")
lineChart!.setCallback(sysgui!.ON_LOST_FOCUS,"event")
lineChart!.setCallback(sysgui!.ON_MOUSE_ENTER,"event")
lineChart!.setCallback(sysgui!.ON_MOUSE_EXIT,"event")
lineChart!.setCallback(sysgui!.ON_POPUP_REQUEST,"event")
lineChart!.setCallback(sysgui!.ON_RIGHT_MOUSE_DOWN,"event")

flags$ = iff(showLegend,$0004$,$0000$)
lineChartLegend! = window!.addCheckBox(106,520,280,500,20,"Line Chart Legend",flags$)
lineChartLegend!.setCallback(lineChartLegend!.ON_CHECK_ON,"lineChartLegendOn")
lineChartLegend!.setCallback(lineChartLegend!.ON_CHECK_OFF,"lineChartLegendOff")

print "BBjLineChart::isLegendShown ",lineChart!.isLegendShown()

rem ===============
rem BBjGenericChart
rem ===============

if info(3,6)="5" then goto skip; rem ' BUI
if info(3,6)="6" then goto skip; rem ' DWC

series! = new TimeSeries@("Random Data")
current! = new org.jfree.data.time.Day@(1,1,2021)
value = 62
for i = 0 to 360
  delta = i/60
  value = value + Math.random() - .5
  series!.add(current!,new Double(value + delta))
  current! = current!.next()
next i
dataset! = new TimeSeriesCollection@(series!)

chart! = ChartFactory@.createTimeSeriesChart("2021 Values","Date","Value",dataset!,0,0,0)
color! = window!.getBackColor()
paint! = new java.awt.Color@(color!.getRed(),color!.getGreen(),color!.getBlue())
chart!.setBackgroundPaint(paint!)

list! = bbjapi().makeVector()
list!.add(new Float(10).floatValue())
list!.add(new Float(1).floatValue())
CAP_ROUND = BasicStroke.CAP_ROUND
JOIN_ROUND = BasicStroke.JOIN_ROUND
stroke! = new BasicStroke@(1,CAP_ROUND,JOIN_ROUND,5,list!,0)
renderer! = new XYLineAndShapeRenderer@()
renderer!.setBaseShapesVisible(0)
renderer!.setSeriesStroke(0,stroke!)
plot! = chart!.getPlot()
plot!.setRenderer(renderer!)

format! = new SimpleDateFormat@("MMM-yyyy")
tickUnit! = new DateTickUnit@(DateTickUnit.MONTH,1,format!)
axis! = plot!.getDomainAxis()
axis!.setTickUnit(tickUnit!)
axis!.setVerticalTickLabels(1)

genericChart! = window!.addGenericChart(107,520,300,500,270)
genericChart!.setToolTipText("BBjGenericChart")
genericChart!.setClientChart(chart!)
genericChart!.getClientChartPanel().setMouseZoomable(1,0)

genericChart!.setCallback(sysgui!.ON_GAINED_FOCUS,"event")
genericChart!.setCallback(sysgui!.ON_LOST_FOCUS,"event")
genericChart!.setCallback(sysgui!.ON_MOUSE_ENTER,"event")
genericChart!.setCallback(sysgui!.ON_MOUSE_EXIT,"event")
genericChart!.setCallback(sysgui!.ON_POPUP_REQUEST,"event")
genericChart!.setCallback(sysgui!.ON_RIGHT_MOUSE_DOWN,"event")

skip:

process_events

eoj:
  release

event:
  event! = sysgui!.getLastEvent()
  control! = event!.getControl()
  print control!," ",event!
return

pieChartLegendOn:
  pieChart!.setLegendShown(1,err=*next); rem ' BBj 19.10+
  print "BBjPieChart::isLegendShown ",pieChart!.isLegendShown()
return

pieChartLegendOff:
  pieChart!.setLegendShown(0,err=*next); rem ' BBj 19.10+
  print "BBjPieChart::isLegendShown ",pieChart!.isLegendShown()
return

barChartLegendOn:
  barChart!.setLegendShown(1,err=*next); rem ' BBj 19.10+
  print "BBjBarChart::isLegendShown ",barChart!.isLegendShown()
return

barChartLegendOff:
  barChart!.setLegendShown(0,err=*next); rem ' BBj 19.10+
  print "BBjBarChart::isLegendShown ",barChart!.isLegendShown()
return

lineChartLegendOn:
  lineChart!.setLegendShown(1,err=*next); rem ' BBj 19.10+
  print "BBjLineChart::isLegendShown ",lineChart!.isLegendShown()
return

lineChartLegendOff:
  lineChart!.setLegendShown(0,err=*next); rem ' BBj 19.10+
  print "BBjLineChart::isLegendShown ",lineChart!.isLegendShown()
return

See Also

BBjAPI

BBjSysGui

BBjWindow

CALLBACK Verb - Register BBj Subroutine

Focusable

TabTraversable

ClientObject Tutorial

See the BBj Object Diagram for an illustration of the relationship between BBj Objects.