Archive for the ‘Jython’ Category

  1. 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] |
    +----------------------------------------+
  2. 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   
    ---------------------------
  3. 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!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  4. 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!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  5. 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!                      |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  6. 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!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. 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!                       |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  8. 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!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  9. 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!
  10. 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!