Archive for the ‘Java’ Category

  1. Hello, Java 3D(Clojure) World!

    Posted on 12月 6th, 2012 by cx20

    Java 3D

    Java 3D は Java による 3D グラフィックライブラリである。
    以下は Clojure による Java 3D の使用例となっている。

    ソースコード

    (import 
      (java.awt BorderLayout)
      (java.awt GraphicsConfiguration)
      (java.awt Font)
      (javax.swing JFrame)
      (javax.swing JPanel)
      (javax.media.j3d BranchGroup)
      (javax.media.j3d Canvas3D)
      (javax.media.j3d Transform3D)
      (javax.media.j3d Appearance)
      (javax.media.j3d Material)
      (javax.media.j3d Font3D)
      (javax.media.j3d FontExtrusion)
      (javax.media.j3d Text3D)
      (javax.media.j3d Shape3D)
      (javax.media.j3d DirectionalLight)
      (javax.media.j3d TransformGroup)
      (javax.media.j3d RotationInterpolator)
      (javax.media.j3d Alpha)
      (javax.media.j3d BoundingSphere)
      (javax.vecmath Vector3f)
      (javax.vecmath Color3f)
      (com.sun.j3d.utils.universe SimpleUniverse)
      (com.sun.j3d.utils.universe ViewingPlatform)
      (com.sun.j3d.utils.geometry ColorCube))
     
    (def frame
      (JFrame.))
     
    (defn create-text-shape []
      (let [
        textAppear (Appearance.)
        font (Font. "MS Pゴシック" Font/PLAIN 1 )
        fontEx (FontExtrusion.)
        font3D (Font3D. font fontEx)
        textGeom (Text3D. font3D "Hello, Java 3D World!")
        textShape (Shape3D.)]
     
        (.setMaterial textAppear (Material.))
        (.setAlignment textGeom Text3D/ALIGN_CENTER)
        (.setGeometry textShape textGeom)
        (.setAppearance textShape textAppear)
        textShape))
     
    (defn move-text-back []
      (let [
        transform3D (Transform3D.)
        vector3f (Vector3f. 0.0 0.0 -10.0)]
     
        (.setTranslation transform3D vector3f)
        (TransformGroup. transform3D)))
     
    (defn create-spinner []
      (let [
        spinner (TransformGroup.)]
     
        (.setCapability spinner (TransformGroup/ALLOW_TRANSFORM_WRITE))
        spinner))
     
    (defn set-lighting [objMove]
      (let [
        light (DirectionalLight.)]
     
        (.setInfluencingBounds light (BoundingSphere.))
        (.setDirection light (Vector3f. 0.0 0.0 -1.0))
        (.setColor light (Color3f. 1.0 1.0 1.0))
        (.addChild objMove light)))
     
    (defn create-scene-graph []
      (let [
        objRoot (BranchGroup.)
        mover (move-text-back)
        spinner (create-spinner)
        rotator (RotationInterpolator. (Alpha. -1 4000), spinner, (Transform3D.) 0.0 (* (Math/PI) 2))]
     
        (.addChild spinner (create-text-shape))
        (.addChild mover spinner)
        (.addChild objRoot mover)
        (.setSchedulingBounds rotator (BoundingSphere.))
        (.addChild spinner rotator)
        (set-lighting mover)
        objRoot))
     
    (def canvas
      (Canvas3D. (SimpleUniverse/getPreferredConfiguration)))
     
    (def universe
      (SimpleUniverse. canvas))
     
    (doto universe
      (.addBranchGraph (create-scene-graph)))
     
    (.setNominalViewingTransform (.getViewingPlatform universe))
    (.add (.getContentPane frame) canvas)
     
    (doto frame
      (.setDefaultCloseOperation
        javax.swing.WindowConstants/EXIT_ON_CLOSE)
      (.setSize 640 480)
      (.setTitle "Hello, World")
      (.setVisible true))

    実行方法

    C:¥> clj Hello.clj

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 3D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  2. Hello, Java 2D(Clojure) World!

    Posted on 12月 5th, 2012 by cx20

    Java 2D

    Java 2D は Java による 2D グラフィックライブラリである。
    以下は Clojure による Java 2D の使用例となっている。

    ソースコード

    (import 
      (javax.swing JFrame)
      (javax.swing JPanel)
      (java.awt Graphics)
      (java.awt Graphics2D))
     
    (defn create-panel []
      (proxy [JPanel] []
        (paintComponent [g]
          (.drawString g "Hello, Java 2D World!" 0 16))))
     
    (def panel
      (create-panel))
     
    (def frame
      (JFrame.))
     
    (doto frame
      (.setDefaultCloseOperation
        javax.swing.WindowConstants/EXIT_ON_CLOSE)
      (.add panel)
      (.setSize 640 480)
      (.setTitle "Hello, World")
      (.setVisible true))

    実行方法

    C:¥> clj Hello.py

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 2D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  3. Hello, SWT(Clojure) World!

    Posted on 12月 3rd, 2012 by cx20

    SWT(Clojure)

    SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
    IBM により AWT や Swing を置き換える目的で作成された。
    以下は Clojure による SWT の使用例となっている。

    ソースコード

    (import 
      (org.eclipse.swt SWT)
      (org.eclipse.swt.widgets Display)
      (org.eclipse.swt.widgets Shell)
      (org.eclipse.swt.widgets Label)
      (org.eclipse.swt.layout FillLayout)
      (org.eclipse.swt.events ShellAdapter))
     
    (def display
      (Display.))
     
    (def shell
      (Shell. display))
     
    (def layout
      (FillLayout. SWT/VERTICAL))
     
    (def label
      (Label. shell SWT/BORDER))
     
    (doto label
      (.setText "Hello, SWT World!"))
     
    (doto shell
      (.setText "Hello, World")
      (.setLayout layout)
      (.setSize 640 480)
      (.addShellListener
        (proxy [ShellAdapter] []
          (shellClosed [evt]
            (System/exit 0))))
      (.open))
     
    (defn while-loop [display shell]
      (loop []
        (if (.isDisposed shell)
          (.dispose display)
          (do
            (if (not (.readAndDispatch display))
              (.sleep display))
            (recur)))))
     
    (while-loop display shell))

    実行方法

    C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH%
    C:¥> clj Hello.clj

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, SWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  4. Hello, Swing(Clojure) World!

    Posted on 12月 2nd, 2012 by cx20

    Swing(Clojure)

    Swing は AWT(Abstract Window Toolkit) を拡張したものであり Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT よりも Swing が使われることが多くなっている。
    以下は Clojure による Swing の使用例となっている。

    ソースコード

    (import (javax.swing JFrame)
            (javax.swing JLabel))
     
    (def frame
      (JFrame.))
     
    (def label
      (JLabel. "Hello, Swing World!"))
     
    (doto label
      (.setVerticalAlignment JLabel/TOP))
     
    (doto frame
      (.setDefaultCloseOperation
        javax.swing.WindowConstants/EXIT_ON_CLOSE)
      (.add label)
      (.setSize 640 480)
      (.setTitle "Hello, World")
      (.setResizable false)
      (.setVisible true))

    実行方法

    C:¥> clj Hello.clj

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Swing World!                       |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  5. Hello, AWT(Clojure) World!

    Posted on 12月 1st, 2012 by cx20

    AWT(Clojure)

    AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
    以下は Clojure による AWT の使用例となっている。

    ソースコード

    (import (java.awt Frame)
            (java.awt Label)
            (java.awt FlowLayout)
            (java.awt.event WindowAdapter))
     
    (def frame
      (Frame.))
     
    (def layout
      (FlowLayout. FlowLayout/LEFT))
     
    (def label
      (Label. "Hello, Swing World!"))
     
    (doto frame
      (.addWindowListener 
        (proxy [WindowAdapter] [] 
          (windowClosing [e] 
            (System/exit 0))))
      (.setLayout layout)
      (.add label)
      (.setSize 640 480)
      (.setTitle "Hello, World")
      (.setResizable false)
      (.setVisible true))

    実行方法

    C:¥> clj Hello.clj

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, AWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  6. 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!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. 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!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  8. 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!                      |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  9. 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!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  10. 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!                       |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+