Libraries
External Java classes, fields and methods are imported into the HolonJ program. Define a local word, which represents the class, field or method. You can then address the item locally.
importClass: List java.awt.List
imports class java.awt.List, which is now accessible as the local word List.
importMethod: AddList List add ( string -- )
imports the method add from the class java.awt.List. The class is indicated here by its local name List, therefore the class must be imported first.
static importField: InStream System in InputStream
The word InStream represents the variable in of type InputStream in the class java.lang.System.
This macro view presents the collection of Java imports that have accumulated to date. You probably find the Java functions that you need here. Otherwise just add them to the library.
The frame is a window that can be moved and resized, but has no actions yet. For example the close button is not active.
This class defines a close action, which simply ends the program.
class: wAction extends WindowAdapter
i: wa.<init> ( -- ) initsuper () ;
i: wa.windowClosing ( windowevent e -- )
0 getRuntime runExit ;
Here is a frame for a game of TicTacToe.
class: TicTacToe extends Frame
i: ttt.<init> ( -- )
" TicTacToe" initsuper ( string -- )
300 300 this setSize
this showWindow
new wAction () this addWindowListener ;
The display part of the frame is its Graphics context.
Graphics myGraphics
: PaintImage ( -- )
" image.gif" getImageFile
10 10 this this getGraphics drawImage ;
x1 y1 x2 y2 myGraphics drawLine
Color myColor
green red blue new myColor ( int int int -- )
Font myFont
" font" style size new myFont ( string int int -- )
font = TimesRoman etc, style = bold, italic, plain
myFont myGraphics setFont
myColor myGraphics setColor
1. Clock as a subclass of Thread.
class: Clock extends Thread
\ The thread action, overwrites run
i: Clock.run ( -- )
begin this repaint 1000. sleep again ;
: Clock.main ( string [] args -- )
clock myClock new myClock ()
myClock startThread ;
2. Clock applet implementing Runnable.
class: Clock extends Applet implements Runnable
Thread myThread
\ The thread action, overwrites run
i: Clock.run ( -- )
begin this repaint 1000. sleep again ;
\ starting the thread
i: Clock.start ( -- )
myThread null? if this new myThread ( runnable -- ) then
myThread startThread ;
." This text is printed" \ prints the text
" Text string" type \ prints a string
55 . \ prints a number
7 ##. \ prints a leading zero if the number is only one digit
" string1" " string2" "+
" test string" "= if ...Stringbuf Text \ a text buffer
0 Text setLength \ empty the buffer
( char -- ) Text caddBuf \ add char to the buffer
Text stringOf \ convert the buffer contents to a string
InputStreams deliver bytes, Readers provide characters. HolonJ gets bytes and reads characters.
importMethod: getByte InputStream read ( -- int )
importClass: File java.io.File
importMethod: exists File exists ( -- boolean ): filetest ( string name -- )
file theFile name new theFile ( string -- )
theFile exists if ." File exists" else ." doesn't exist" then ;
Stringbuf Text
FileInputstream Inputi: getText ( file myFile -- )
myFile new Input ( file -- ) 0 Text setLength
begin Input getByte dup -1 <> while Text caddBuf drop repeat ;
\ prints current date and time
: printDate ( -- )
new Date () toString type ;
importMethod: addButtonListener
Button addActionListener ( ActionListener -- )i: addButton ( string btext -- )
btext new Button ( string -- )
dup Controlpanel addComp
this swap addButtonListener ;