From a59a34b5e0492465c3ea61b772cdd2b91fb505c4 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Wed, 1 Feb 2012 06:04:51 +0000 Subject: [PATCH] Improve the swing sample lua application. --- README.html | 13 +++- examples/lua/logo.gif | Bin 0 -> 2694 bytes examples/lua/swingapp.lua | 149 ++++++++++++++++++++++++++++++++------ 3 files changed, 136 insertions(+), 26 deletions(-) create mode 100644 examples/lua/logo.gif diff --git a/README.html b/README.html index a67a8596..448da6ca 100644 --- a/README.html +++ b/README.html @@ -19,7 +19,7 @@ Getting Started with LuaJ James Roseborough, Ian Farmer, Version 2.0.3

-Copyright © 2009-2010 Luaj.org. +Copyright © 2009-2012 Luaj.org. Freely available under the terms of the Luaj license. @@ -191,6 +191,12 @@ You should see the following output: hello, world +To see how luaj can be used to acccess most Java API's including swing, try: + +

+	java -cp lib/luaj-jse-2.0.3.jar lua examples/lua/swingapp.lua
+
+

Compile lua source to lua bytecode

@@ -501,7 +507,7 @@ The JsePlatform.standardGlobals() includes the luajava library It is patterned after the original luajava project.

-The following lua script will open a swiing frame on Java SE: +The following lua script will open a swing frame on Java SE:

 	jframe = luajava.bindClass( "javax.swing.JFrame" )
 	frame = luajava.newInstance( "javax.swing.JFrame", "Texts" );
@@ -511,7 +517,8 @@ The following lua script will open a swiing frame on Java SE:
 

-See a longer sample in examples/lua/swingapp.lua for details, or try running it using: +See a longer sample in examples/lua/swingapp.lua for details, including a simple animation loop, rendering graphics, mouse and key handling, and image loading. +Or try running it using:

 	java -cp lib/luaj-jse-2.0.3.jar lua examples/lua/swingapp.lua
 
diff --git a/examples/lua/logo.gif b/examples/lua/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..193e69208494ed9272f4f0f10f275f3a65373d51 GIT binary patch literal 2694 zcmV;13VHQMNk%w1VSoUD0K@;M3G?CkaA0;@PYLMYA*0%^fGD=K2B20?&8 z$e&1|B9Y+pT67U38W02se=igb4*&xl0{{;O4F_>35DbP0HyU+kYA^v09;K$I0~rmM z8YFx@dIc~C1^}nGrX3prR00JG5K0TOD;EwM1Gu*U7Ohaf3JY*aYzhU5CkY(3%BC3? zPzwvrOA!PN3nU2!1`Y`&7Z%*z85EaDeIpkbxepw?BMxlq=D|P`Ph2i>P}TuM19AcQ zF?4XmjDm!5k`Z)BNS?9>mWZ5NfUSx~f*msdyc01>83!VTIN1_P@ytE&7FaG-$!42=dn>HsOy0}PZ7Y;|EE z>Ma9ADO^2e&<6oxG4L3}U~7V3zsmjs9)Q6CxEBrF-l``;?x_cM8Q_gU!NG$LfIX1i zOjdI#&Yk~uc;JBO2b>plDmFl7pD6%6&dGE^=0Ju4fH`aK;Mp_p-=BB$_M0lCin)qS zSs0N3Y6l(&7|ecg00ZXTr#kxv4&3+l;T|v;KM~+$@&Q>tG)VS*hk$8{GF;cq-MjbS z^?82=|1AabDWPfGqzBGbhKeGfp$%X`DAvOVUP#~1~}=~20BQPh6@^a*kG7B zj)@Cq4-8U*0~QiAz)CkDKvD~Fei>Yji0%YH1`Y&p0ZkVK;6Mi4{5HW*CM0lMa?2ed zfSlMRTIVtuI67lx&f$6F2mw$U6$Yji;bnKCis``s8$1Mq1|Dg4VhR^{6&56tSTNoY zVPx=St+kedfr~P<@XM+*Q~`t%0rB*ib1rzYpux*TG@z}~GaCREE(1KU0S65Pu#_`M9S}eR92{)keiOWlf*(Z` zO*M(P_EyRy4IBnTuvRmDsT5Mb-DG#THel`w2PlY{k3a~3z|bXt+HteL?Xp7vOg9}w z1q{H4LINfFogZ)B4(`JLLLg$+^9co1{KCa7DBGat3u@-m4iq@&+XU3k$np#jq@#ic z>~;S5%mW;Y1H@2vHbAT=)FFcgT&mDF)5F*KF%R+X2V&YQn8A1ozUaB{2d*1l{mi${ zeuKE#-OeUX5k$`ezZ}oWpv<1Riv#9T_V zc)$e7{Gz3PNu)cbpl=RZqX^olOqLweo2Hmj0LB@s|3LGH+d~`*wy-*Dq9Bi-W92s8 zvdnINAesd^K(9>kfR#|-F&Xj+J{cs)6%H^=nCL9H~iJ>QDdy zM5PerDMtU70yj-32eUd9Z*;oShnC`^xF{Jrx<(YBKJ}!u`ql3UaKxE>AW3S>Vk@Hp z)u!TtG|VG`RSQy5QyK)7UQHy3m>N{4vQ?e$|W^Z%~0jsi0_cB`iS`n*D9j*2NbDE>k#v)7C&f4{& z06D;rdUgh@E6;$9NLMUHngt&rasxJXv zJLlZgF;(UPl{ZigB%7QzgagEk!+0#kpHNV+l6L9@1`w@T+gA$c8X*iDSeAQP5X}~q zpgMOQC|pXAJsls{e=8n>1Uh=;u;vT^j^w5?2;)c}?wCxI?Ll+^Jc2NQwSc6wQ>Vt8 z+ZE6hu7vd6?{3P(GzV!V%JmhdR$#^(Y{|DJn4X=56ILMpMXVz5657;uf(ZDR29GxX zLHX?SHk`^Wo5DHESu8*l7dHrZWmEv1cWW;CO>l+mlIH#7rm_!EU>=wOfC)EBga$09wLGpC4q)cOCrv*XyA1y(7^_%D*J~B z4I15OJwl{`X$%~G51TheSjiBK;01Flx|wFw!R$NHNwC8PSioQy0LxhzW`PDIU{yiC z#4x-n1De#}>r>d0Wi9FXPu?U40w@xosc>Nh%)1H}dHom`AbTl9J@bm+5a@GX0FVFJ z+_^WwmaKvM8TbMi!GD1{G@*oxu?+ahH$eny9|QsrVAj!RK^^wsLhEN=%tdO$>M>X( zP<;Of_QFF2>_Exs(18Hdg^vL4vitLQpSrsn!Nu5LfBXCY{{R?(0yuyJmk max then + return max, math.random(-10,-2) + end + return x, vx +end +animate = function() + x1,y1,x2,y2 = x1+1,y1+1,x2-1,y2-1 + x1,vx1 = advance(x1,vx1,640) + y1,vy1 = advance(y1,vy1,480) + x2,vx2 = advance(x2,vx2,640) + y2,vy2 = advance(y2,vy2,480) + xi,vxi = advance(xi,vxi,540) + yi,vyi = advance(yi,vyi,380) +end + +-- try loading the logo image from a couple locations +local imageio = luajava.bindClass("javax.imageio.ImageIO") +local file = luajava.bindClass("java.io.File") +local loadimage = function(path) + local s,i = pcall(imageio.read, imageio, luajava.new(file, path)) + return s and i +end +local logo = loadimage("logo.gif") or loadimage("examples/lua/logo.gif") + +-- the render step draws the scene +local g = image:getGraphics() +local bg = luajava.newInstance("java.awt.Color", 0x22112244, true); +local fg = luajava.newInstance("java.awt.Color", 0xffaa33); +render = function() + g:setColor(bg) + g:fillRect(0,0,640,480) + if logo then g:drawImage(logo,xi,yi) end + g:setColor(fg) + g:drawLine(x1,y1,x2,y2) +end + +-- add mouse listeners for specific mouse events +label:addMouseListener(luajava.createProxy("java.awt.event.MouseListener", { + mousePressed = function(e) + --print('mousePressed', e:getX(), e:getY(), e) + x1,y1 = e:getX(),e:getY() + end, + -- mouseClicked = function(e) end, + -- mouseEntered = function(e) end, + -- mouseExited = function(e) end, + -- mouseReleased = function(e) end, +})) +label:addMouseMotionListener(luajava.createProxy("java.awt.event.MouseMotionListener", { + mouseDragged = function(e) + --print('mouseDragged', e:getX(), e:getY(), e) + x2,y2 = e:getX(),e:getY() + end, + -- mouseMoved= function(e) end, +})) + +-- add key listeners +frame:addKeyListener(luajava.createProxy("java.awt.event.KeyListener", { + keyPressed = function(e) + local id, code, char, text = e:getID(), e:getKeyCode(), e:getKeyChar(), e:getKeyText(e:getKeyCode()) + print('key id, code, char, text, pcall(string.char,char)', id, code, char, text, pcall(string.char,char)) + end, + -- keyReleased = function(e) end, + -- keyTyped = function(e) end, +})) + +-- use the window listener to kick off animation +frame:addWindowListener(luajava.createProxy("java.awt.event.WindowListener", { + windowOpened = function(e) + swingUtilities:invokeLater(tick) + end, + -- windowActivated = function(e) end, + -- windowClosed = function(e) end, + -- windowClosing = function(e) end, + -- windowDeactivated = function(e) end, + -- windowDeiconified = function(e) end, + -- windowIconified = function(e) end, +})) + +-- utility function to load an image from a file, for reference +local loadimage = function(filename) +end + +-- Set window visible last to start app. frame:setVisible(true) - -local listener = luajava.createProxy("java.awt.event.MouseListener", - { - mouseClicked = function(me) - print("clicked!", me) - end - }) - -frame:addMouseListener(listener)