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
なんかだらだら解説を書くのに疲れたので、各自解読してください。