Jython を学ぶ(5)───Apache Batik の SVGCanvas で SVG を簡単に表示する

しばらく中断といっておきながら一日しか中断しないのであった。

どうも I/O 関連は考えが定まらないので、先に Apache Batik で SVG を表示する例を紹介します。

http://xmlgraphics.apache.org/batik/using/swing.html に載っている例の Jython 版です。

#! jython
from java.lang import Runnable
class PyCallableRunnable(Runnable):
	def __init__(self, pyCallable):
		self.pyCallable=pyCallable
		return
	def run(self):
		self.pyCallable()
		return
def initializeAWTUI():
	from javax.swing import JPanel
	from java.awt import BorderLayout
	panel=JPanel(BorderLayout())
	from java.awt import FlowLayout
	p=JPanel(FlowLayout(FlowLayout.LEFT))
	from javax.swing import JButton
	button=JButton("Choose SVG File")
	p.add(button)
	from org.apache.batik.swing import JSVGCanvas
	svgCanvas=JSVGCanvas()
	panel.add("North", p)
	panel.add("Center", svgCanvas)
	def buttonActionPerformed(ae):
		from javax.swing import JFileChooser
		fc=JFileChooser(".")
		choice=fc.showOpenDialog(panel)
		if choice==JFileChooser.APPROVE_OPTION:
			f=fc.selectedFile
			svgCanvas.setURI(f.toURL().toString())
	button.actionPerformed=buttonActionPerformed
	from javax.swing import JFrame
	from java.awt import Rectangle
	frame=JFrame(
		title="Batik Test", 
		bounds=Rectangle(800, 600), 
		visible=False
		)
	frame.contentPane.add(panel)
	def windowClosing(e):
		window=e.window
		window.visible=False
		window.dispose()
	frame.windowClosing=windowClosing
	frame.visible=True
if __name__=="__main__":
	from java.awt import EventQueue
	EventQueue.invokeLater(PyCallableRunnable(initializeAWTUI))


環境変数 CLASSPATH に ./batik.jar を追記して、

jython svgviewer.py


なんかだらだら解説を書くのに疲れたので、各自解読してください。


Jython に慣れればあとは JavaDoc を調べれば分かるはずです。きっと分かるに違いない。