Archive for the ‘Jython’ Category
-
Hello, COM(Jython) World!
Posted on 1月 20th, 2013 by cx20
COM(Jython)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
Jython 自身には、COM を呼び出す機能を持っていないが、別途ライブラリを経由することで呼び出すことが可能である。
以下は Jython より JACOB(JAVA-COM Bridge) ライブラリを使用した COM クライアントの例となっている。ソースコード
from com.jacob.com import Variant from com.jacob.activeX import ActiveXComponent shell = ActiveXComponent("Shell.Application") hwnd = Variant(0) title = Variant("Hello, COM(JACOB) World!") option = Variant(0) rootFolder = Variant(36) params = [ hwnd, title, option, rootFolder ] folder = shell.invoke( "BrowseForFolder", params )
実行方法
C:¥> SET CLASSPATH=jacob.jar;.;%CLASSPATH% C:¥> jython Hello.py
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(JACOB) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+
-
Hello, Win32 API(Jython) World!
Posted on 1月 10th, 2013 by cx20
Win32 API(Jython)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Jython にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
from org.eclipse.swt.internal.win32 import OS from org.eclipse.swt.internal.win32 import TCHAR lpText = TCHAR(0, "Hello, Win32 API World!", True) lpCaption = TCHAR(0, "Hello, World", True) OS.MessageBox(0, lpText, lpCaption, OS.MB_OK )
実行方法
C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> jython Hello.py
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Java 3D(Jython) World!
Posted on 11月 30th, 2012 by cx20
Java 3D
Java 3D は Java による 3D グラフィックライブラリである。
以下は Jython による Java 3D の使用例となっている。ソースコード
from java.lang import Math from java.awt import BorderLayout from java.awt import GraphicsConfiguration from java.awt import Font from javax.media.j3d import Canvas3D from javax.media.j3d import BranchGroup from javax.media.j3d import Transform3D from javax.media.j3d import TransformGroup from javax.media.j3d import Appearance from javax.media.j3d import Material from javax.media.j3d import Font3D from javax.media.j3d import FontExtrusion from javax.media.j3d import Text3D from javax.media.j3d import Shape3D from javax.media.j3d import DirectionalLight from javax.media.j3d import RotationInterpolator from javax.media.j3d import Alpha from javax.media.j3d import BoundingSphere from javax.swing import JFrame from javax.vecmath import Vector3f from javax.vecmath import Color3f from com.sun.j3d.utils.universe import SimpleUniverse class HelloFrame(JFrame): def __init__(self, title ): self.setTitle(title) self.setSize(640, 480) self.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) canvas3D = self.createCanvas3D() scene = self.createSceneGraph() self.connect(canvas3D, scene) def createCanvas3D(self): self.getContentPane().setLayout(BorderLayout()) config = SimpleUniverse.getPreferredConfiguration() canvas3D = Canvas3D(config) self.getContentPane().add(canvas3D) return canvas3D def createSceneGraph(self): objRoot = BranchGroup() mover = self.moveTextBack() spinner = self.createSpinner() rotator = RotationInterpolator(Alpha(-1, 4000), spinner, Transform3D(), 0.0, Math.PI * 2) rotator.setSchedulingBounds( BoundingSphere() ) spinner.addChild(rotator) objRoot.addChild(mover) mover.addChild(spinner) spinner.addChild(self.createTextShape()) self.setLighting(mover) return objRoot def createSpinner(self): spinner = TransformGroup() spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE) return spinner def moveTextBack(self): transform3D = Transform3D() transform3D.setTranslation(Vector3f(0.0, 0.0, -10.0)) return TransformGroup(transform3D) def createTextShape(self): textAppear = Appearance() textAppear.setMaterial(Material()) font3D = Font3D(Font("MS Pゴシック", Font.PLAIN, 1), FontExtrusion()) textGeom = Text3D(font3D, "Hello, Java 3D World!") textGeom.setAlignment(Text3D.ALIGN_CENTER) textShape = Shape3D() textShape.setGeometry(textGeom) textShape.setAppearance(textAppear) return textShape def setLighting(self,objMove): light = DirectionalLight() light.setInfluencingBounds(BoundingSphere()) light.setDirection(Vector3f(0.0,0.0,-1.0)) light.setColor(Color3f(1.0, 1.0, 1.0)) objMove.addChild(light) def connect(self,canvas3D, scene): universe = SimpleUniverse(canvas3D) universe.getViewingPlatform().setNominalViewingTransform() universe.addBranchGraph(scene) if __name__ == '__main__': frame = HelloFrame("Hello, World") frame.setVisible(True)
実行方法
C:¥> jython Hello.rb
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Java 3D World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, Java 2D(Jython) World!
Posted on 11月 29th, 2012 by cx20
Java 2D
Java 2D は Java による 2D グラフィックライブラリである。
以下は Jython による Java 2D の使用例となっている。ソースコード
import java from java.awt import Graphics from java.awt import Graphics2D from javax.swing import JFrame from javax.swing import JPanel class HelloFrame(JFrame): def __init__(self,title): self.setTitle( title ) self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(640, 480) panel = HelloPanel() self.add( panel ) class HelloPanel(JPanel): def paintComponent(self,g): g.drawString("Hello, Java2D World!", 0, 16) if __name__ == '__main__': frame = HelloFrame("Hello, World") frame.setVisible(True)
コンパイル&実行方法
C:¥> jython Hello.py
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Java 2D World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, JavaFX(Jython) World!
Posted on 11月 28th, 2012 by cx20
JavaFX(Jython)
JavaFX は Java による RIA 向けの GUI ライブラリならびにプラットフォームである。
類似の RIA プラットフォームとしては Adobe Flex や Microsoft Silverlight などがある。
以下は Jython による JavaFX の使用例となっている。ソースコード
import sys from javafx.application import Application from javafx.scene import Group from javafx.scene import Scene from javafx.scene.layout import HBox from javafx.scene.control import Label from javafx.util import Callback class HelloApplication(Application): def start(self, stage): hbox = HBox() scene = Scene( hbox, 640, 480 ) hbox.getChildren().add( Label( "Hello, JavaFX World!" ) ) stage.setScene( scene ) stage.setTitle( "Hello, World" ) stage.show() if __name__ == "__main__": Application.launch(HelloApplication().class, sys.argv[1:])
実行方法
C:¥> SET JAVAFX_HOME=C:\Program Files (x86)\Oracle\JavaFX 2.0 SDK C:¥> SET CLASSPATH=%JAVAFX_HOME%\rt\lib\jfxrt.jar;%CLASSPATH% C:¥> jython Hello.py
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, JavaFX World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, SWT(Jython) World!
Posted on 11月 27th, 2012 by cx20
SWT(Jython)
SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
IBM により AWT や Swing を置き換える目的で作成された。
以下は Jython による SWT の使用例となっている。ソースコード
from java.lang import System from org.eclipse.swt import SWT from org.eclipse.swt.widgets import Display from org.eclipse.swt.widgets import Shell from org.eclipse.swt.widgets import Label from org.eclipse.swt.layout import FillLayout display = Display() shell = Shell(display) shell.setText("Hello, World") layout = FillLayout(SWT.VERTICAL) shell.setLayout(layout) label = Label(shell,SWT.BORDER) label.setText("Hello, SWT World!") shell.setSize( 640, 480 ) shell.open() while not shell.isDisposed(): if not display.readAndDispatch(): display.sleep() display.dispose()
実行方法
C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> jython Hello.py
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, SWT World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, Swing(Jython) World!
Posted on 11月 26th, 2012 by cx20
Swing(Jython)
Swing は AWT(Abstract Window Toolkit) を拡張したものであり Java で GUI を扱うためのライブラリである。
J2SE 1.2 以降は AWT よりも Swing が使われることが多くなっている。
以下は Jython による Swing の使用例となっている。ソースコード
from java.lang import System from javax.swing import JFrame from javax.swing import JLabel class HelloFrame(JFrame): def __init__(self): self.setTitle( "Hello, World" ) self.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) self.setSize( 640, 480 ) label = JLabel( "Hello, Swing World!" ) label.setVerticalAlignment( JLabel.TOP ) self.add( label ) if __name__ == '__main__': frame = HelloFrame() frame.setVisible(True)
実行方法
C:¥> jython Hello.py
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Swing World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, AWT(Jython) World!
Posted on 11月 25th, 2012 by cx20
AWT(Jython)
AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
以下は Jython による AWT の使用例となっている。ソースコード
from java.lang import System from java.awt import Frame from java.awt import Label from java.awt import FlowLayout from java.awt.event import WindowAdapter class HelloFrame(Frame): def __init__(self): self.setTitle( "Hello, World" ) self.addWindowListener(HelloWindowAdapter()) self.setSize( 640, 480 ) self.setLayout( FlowLayout(FlowLayout.LEFT) ) label = Label( "Hello, AWT World!" ) self.add( label ) class HelloWindowAdapter(WindowAdapter): def windowClosing(self, event): System.exit(0) if __name__ == '__main__': frame = HelloFrame() frame.setVisible(True)
実行方法
C:¥> jython Hello.py
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, AWT World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, JDBC Type4(Jython) World!
Posted on 10月 12th, 2012 by cx20
JDBC Type4
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type4 は DBMS のクライアントライブラリを使用しない Pure Java の DBMS ドライバである。
以下は Jython による JDBC ライブラリの使用例となっている。ソースコード(Jython + JDBC Type4 + SQL Server)
from com.ziclix.python.sql import zxJDBC conn = zxJDBC.connect("jdbc:sqlserver://;serverName=localhost", "sa", "P@ssW0rd", "com.microsoft.sqlserver.jdbc.SQLServerDriver") cur = conn.cursor() cur.execute("SELECT 'Hello, JDBC Type4 World!' AS Message") rows = cur.fetchall() for row in rows: print row[0] conn.commit() cur.close() conn.close()
実行方法(Jython + JDBC Type4 + SQL Server)
C:¥> SET CLASSPATH=sqljdbc4.jar;%CLASSPATH% C:¥> jython -C utf-8 Hello.py
ソースコード(Jython + JDBC Type4 + Oracle)
from com.ziclix.python.sql import zxJDBC conn = zxJDBC.connect("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger", "oracle.jdbc.driver.OracleDriver") cur = conn.cursor() cur.execute("SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL") rows = cur.fetchall() for row in rows: print row[0] conn.commit() cur.close() conn.close()
実行方法(Jython + JDBC Type4 + Oracle)
C:¥> SET CLASSPATH=ojdbc6.jar;%CLASSPATH% C:¥> jython Hello.py
ソースコード(Jython + JDBC Type4 + MySQL)
from com.ziclix.python.sql import zxJDBC conn = zxJDBC.connect("jdbc:mysql://localhost:3306", "root", "P@ssW0rd", "com.mysql.jdbc.Driver") cur = conn.cursor() cur.execute("SELECT 'Hello, JDBC Type4 World!' AS Message") rows = cur.fetchall() for row in rows: print row[0] conn.commit() cur.close() conn.close()
実行方法(Jython + JDBC Type4 + MySQL)
C:¥> SET CLASSPATH=mysql-connector-java-5.1.22-bin.jar;%CLASSPATH% C:¥> jython Hello.py
実行結果
Hello, JDBC Type4 World!
-
Hello, JDBC Type2(Jython) World!
Posted on 10月 11th, 2012 by cx20
JDBC Type2
JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
Type2 は JDBC と DBMS クライアントの API をマップさせたブリッジドライバである。
例えば、Oracle であればクライアントライブラリとして OCI が使用される。
以下は Jython による JDBC ライブラリの使用例となっている。ソースコード(Jython + JDBC Type2 + Oracle)
from com.ziclix.python.sql import zxJDBC conn = zxJDBC.connect("jdbc:oracle:oci:@orcl", "scott", "tiger", "oracle.jdbc.driver.OracleDriver") cur = conn.cursor() cur.execute("SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL") rows = cur.fetchall() for row in rows: print row[0] conn.commit() cur.close() conn.close()
実行方法
C:¥> SET CLASSPATH=ojdbc6.jar;%CLASSPATH% C:¥> jython Hello.py
実行結果
Hello, JDBC Type2 World!