Liebe alle,
anbei unsere Hausübung.
Liebe Grüße
Kenan Selak und Katharina Müller-Weismann
OUTPUT: Siehe Screenshots
INPUT:
If arg(1)='?' Then Do
Parse Source source
Say source
Say 'Create a window with a choice-object and two text-fields and buttons;'
Say ' if the ok-button is pressed then popup another window and display'
Say ' what was chosen and entered, respectively.'
Exit
End
if BsfInvokedBy()=1 then say "This Rexx program was invoked by Java!"
else if BsfInvokedBy()=2 then say "This Rexx program was invoked by Rexx, JVM loaded by Rexx!"
else say "No JVM present, we got troubles ..."
/* create userData for use with the Greetings routine and event handlers;
this allows us to access the registered objects */
userData=.directory~new
rexxCloseEH=.RexxCloseAppEventHandler~new -- create Rexx event handler
-- create a RexxProxy for our Rexx event handler
rpCloseEH=BsfCreateRexxProxy(rexxCloseEH, , "java.awt.event.ActionListener", -
"java.awt.event.WindowListener")
/* create Object Rexx prox-classes for the following "java"-classes: */
.BSF~bsf.import('java.awt.Button' , 'awtButton' )
.BSF~bsf.import('java.awt.Choice' , 'awtChoice' )
.BSF~bsf.import('java.awt.Color' , 'awtColor' )
.BSF~bsf.import('java.awt.Frame' , 'awtFrame' )
.BSF~bsf.import('java.awt.GridLayout', 'awtGridLayout' )
.BSF~bsf.import('java.awt.Label' , 'awtLabel' )
.BSF~bsf.import('java.awt.TextField' , 'awtTextField' )
/* create 3 labels */
label1 = .awtLabel~new('Geschlecht: ')
label2 = .awtLabel~new('Name: ')
label3 = .awtLabel~new('Nachname: ')
/* create a drop down list with 3 entries */
dropDown = .awtChoice~new
dropDown~~addItem('männlich')~~addItem('weiblich') ~~addItem('divers')
/* create 2 textfields */
Nachname = .awtTextField~new
Name = .awtTextField~new
/* create userData for use with the Greetings routine;
this allows us to access the registered objects */
userData~DropDown = DropDown
userData~Nachname = Nachname
userData~Name = Name
/* create 2 buttons and add addEventListeners to them */
oK = .awtButton~new('OK')
rpOk=BsfCreateRexxProxy(.RexxOkHandler~new, userData, "java.awt.event.ActionListener")
ok~addActionListener(rpOk)
cancel = .awtButton~new('Cancel')
cancel~addActionListener(rpCloseEH)
/* set the window layout */
-- Background = .awtColor~new(150, 150, 250)
background = .awtColor~newStrict("int", 150, "int", 150, "int", 250)
gLayout = .awtGridLayout~new(4, 2)
window = .awtFrame~new('OO-Greetings!')
window~addWindowListener(rpCloseEH)
/* add all the elements to the window */
window~setLayout(GLayout)
window~~add(Label1)~~add(DropDown)
window~~add(Label2)~~add(Name)
window~~add(Label3)~~add(Nachname)
window~~add(OK) ~~add(Cancel)
window~setSize(200, 200)
window~setBackground(Background)
window~~pack~~setVisible(.true)~~toFront
/* no access needed anymore, free the references to
the objects (just to demonstrate this feature) */
drop label1
drop label2
drop label3
rexxCloseEH~waitForExit -- wait until we are allowed to end the program
window~dispose -- dispose of the Window
call syssleep .25
-- if Java was loaded by Rexx, then terminate Java's RexxEngine to inhibit callbacks from Java
call BSF.terminateRexxEngine
::REQUIRES BSF.CLS -- get the Java support
--open up a new window and greet the user
::ROUTINE Greetings
use arg userData
window2 = .awtFrame~new /* create another window */
greet = .awtLabel~new /* create a label */
bye = .awtButton~new('Bye!') /* create a button */
/* add label and button to the window */
window2~~add('North', greet)~~add('South', Bye)
/* now prepare to put something into that window */
Geschlecht = userData~DropDown~getSelectedItem /* get chosen Item */
n1 = userData~Name~getText /* get entered text */
n2 = userData~Nachname~getText /* get entered text */
if Geschlecht = "männlich" then Greet~setText('Lieber Herr' N1 N2)
if Geschlecht = "weiblich" then Greet~setText('Liebe Frau' N1 N2)
if Geschlecht = "divers" then Greet~setText('GutenTag' N1 N2)
window2~~pack~~setVisible(.true)~~toFront
rexxCloseEH=.RexxClosePopupEventHandler~new -- create Rexx event handler
-- create a RexxProxy for our Rexx event handler
rp=BsfCreateRexxProxy(rexxCloseEH, , "java.awt.event.ActionListener", -
"java.awt.event.WindowListener")
window2~addWindowListener(rp)
bye~addActionListener(rp)
rexxcloseEH~waitForExit -- wait until we are allowed to end the program
window2~dispose -- dispose of this window
/* ------------------------------------------------------------------------ */
/* Rexx event handler to set "close app" indicator */
::class RexxCloseAppEventHandler
::method init /* constructor */
expose closeApp
closeApp = .false -- if set to .true, then it is safe to close the app
::attribute closeApp -- indicates whether app should be closed
::method unknown -- intercept unhandled events, do nothing
::method actionPerformed -- event method (from ActionListener)
expose closeApp
closeApp=.true -- indicate that the app should close
::method windowClosing -- event method (from WindowListener)
expose closeApp
closeApp=.true -- indicate that the app should close
::method waitForExit -- method blocks until attribute is set to .true
expose closeApp
guard on when closeApp=.true
/* ------------------------------------------------------------------------ */
/* Rexx event handler to process tab changes */
::class RexxOkHandler
::method actionPerformed
use arg eventObject, slotDir
reply -- do not block awt-thread, proceed execution on a new thread
call Greetings slotDir~userData
/* ------------------------------------------------------------------------ */
/* Rexx event handler to set "close app" indicator */
::class RexxClosePopupEventHandler
::method init /* constructor */
expose closeApp
closeApp = .false -- if set to .true, then it is safe to close the app
::attribute closeApp -- indicates whether app should be closed
::method unknown -- intercept unhandled events, do nothing
::method actionPerformed -- event method (from ActionListener)
expose closeApp
closeApp=.true -- indicate that the app should close
::method windowClosing -- event method (from WindowListener)
expose closeApp
closeApp=.true -- indicate that the app should close
::method waitForExit -- method blocks until attribute is set to .true
expose closeApp
guard on when closeApp=.true