Archive for 11月, 2012
-
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, Java 3D(JRuby) World!
Posted on 11月 24th, 2012 by cx20
Java 3D
Java 3D は Java による 3D グラフィックライブラリである。
以下は JRuby による Java 3D の使用例となっている。ソースコード
require 'java' import 'java.awt.BorderLayout' import 'java.awt.GraphicsConfiguration' import 'java.awt.Font' import 'javax.media.j3d.Canvas3D' import 'javax.media.j3d.BranchGroup' import 'javax.media.j3d.Transform3D' import 'javax.media.j3d.TransformGroup' import 'javax.media.j3d.Appearance' import 'javax.media.j3d.Material' import 'javax.media.j3d.Font3D' import 'javax.media.j3d.FontExtrusion' import 'javax.media.j3d.Text3D' import 'javax.media.j3d.Shape3D' import 'javax.media.j3d.DirectionalLight' import 'javax.media.j3d.RotationInterpolator' import 'javax.media.j3d.Alpha' import 'javax.media.j3d.BoundingSphere' import 'javax.swing.JFrame' import 'javax.vecmath.Vector3f' import 'javax.vecmath.Color3f' import 'com.sun.j3d.utils.universe.SimpleUniverse' class HelloFrame < JFrame def initialize( title ) super(title) self.setSize(640, 480) self.setDefaultCloseOperation( JFrame::EXIT_ON_CLOSE ) @canvas3D = createCanvas3D() @scene = createSceneGraph() connect(@canvas3D, @scene) end def createCanvas3D() getContentPane().setLayout(BorderLayout.new()) @config = SimpleUniverse.getPreferredConfiguration() @canvas3D = Canvas3D.new(@config) getContentPane().add(@canvas3D) return @canvas3D end def createSceneGraph() @objRoot = BranchGroup.new() @mover = moveTextBack() @spinner = createSpinner() @rotator = RotationInterpolator.new(Alpha.new(-1, 4000), @spinner, Transform3D.new(), 0.0, Math::PI * 2) @rotator.setSchedulingBounds( BoundingSphere.new() ) @spinner.addChild(@rotator) @objRoot.addChild(@mover) @mover.addChild(@spinner) @spinner.addChild( createTextShape()) setLighting(@mover) return @objRoot end def createSpinner() @spinner = TransformGroup.new() @spinner.setCapability(TransformGroup::ALLOW_TRANSFORM_WRITE) return @spinner end def moveTextBack() @transform3D = Transform3D.new() @transform3D.setTranslation(Vector3f.new(0.0, 0.0, -10.0)) return TransformGroup.new(@transform3D) end def createTextShape() @textAppear = Appearance.new() @textAppear.setMaterial(Material.new()) @font3D = Font3D.new(Font.new("MS Pゴシック", Font::PLAIN, 1), FontExtrusion.new()) @textGeom = Text3D.new(@font3D, String.new("Hello, Java 3D World!")) @textGeom.setAlignment(Text3D::ALIGN_CENTER) @textShape = Shape3D.new() @textShape.setGeometry(@textGeom) @textShape.setAppearance(@textAppear) return @textShape end def setLighting(objMove) @light = DirectionalLight.new() @light.setInfluencingBounds(BoundingSphere.new()) @light.setDirection(Vector3f.new(0.0,0.0,-1.0)) @light.setColor(Color3f.new(1.0, 1.0, 1.0)) objMove.addChild(@light) end def connect(canvas3D, scene) @universe = SimpleUniverse.new(canvas3D) @universe.getViewingPlatform().setNominalViewingTransform() @universe.addBranchGraph(scene) end end @frame = HelloFrame.new("Hello, World") @frame.setVisible(true)
実行方法
C:¥> jrubyw Hello.rb
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Java 3D World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, Java 2D(JRuby) World!
Posted on 11月 23rd, 2012 by cx20
Java 2D
Java 2D は Java による 2D グラフィックライブラリである。
以下は JRuby による Java 2D の使用例となっている。ソースコード
require 'java' import 'java.awt.Graphics' import 'java.awt.Graphics2D' import 'javax.swing.JFrame' import 'javax.swing.JPanel' class HelloFrame < JFrame def initialize( title ) super( title ) self.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE) self.setSize(640, 480) @panel = HelloPanel.new() add( @panel ) end end class HelloPanel < JPanel def paintComponent(g) @g2 = g @g2.drawString("Hello, Java2D World!", 0, 16) end end @frame = HelloFrame.new("Hello, World") @frame.setVisible(true)
コンパイル&実行方法
C:¥> jrubyw Hello.rb
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, Java 2D World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, JavaFX(JRuby) World!
Posted on 11月 22nd, 2012 by cx20
JavaFX(Scala)
JavaFX は Java による RIA 向けの GUI ライブラリならびにプラットフォームである。
類似の RIA プラットフォームとしては Adobe Flex や Microsoft Silverlight などがある。
以下は JRuby にて JRubyFX ライブラリを用いた JavaFX の使用例となっている。ソースコード
require 'jrubyfx' class Hello include JRubyFX def start(stage) hbox = HBox.new hbox.children << Label.new("Hello, JavaFX World!") stage.scene = Scene.new(hbox, 640, 480) stage.title = "Hello, World" stage.show end end Hello.start
実行方法
C:¥> jruby --1.9 Hello.rb
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, JavaFX World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+
-
Hello, SWT(JRuby) World!
Posted on 11月 21st, 2012 by cx20
SWT(JRuby)
SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
IBM により AWT や Swing を置き換える目的で作成された。
以下は JRuby による SWT の使用例となっている。ソースコード
require 'java' require 'org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar' import 'org.eclipse.swt.SWT' import 'org.eclipse.swt.widgets.Display' import 'org.eclipse.swt.widgets.Shell' import 'org.eclipse.swt.widgets.Label' import 'org.eclipse.swt.layout.FillLayout' @display = Display.new @shell = Shell.new(display) @shell.setText("Hello, World") @layout = FillLayout.new(SWT::VERTICAL) @shell.setLayout(@layout) @label = Label.new(@shell,SWT::BORDER) @label.setText("Hello, SWT World!") @shell.setSize( 640, 480 ) @shell.open while (!@shell.isDisposed) do if (!@display.readAndDispatch) then @display.sleep end end @display.dispose
実行方法
C:¥> jrubyw Hello.rb
実行結果
+------------------------------------------+ |Hello, World! [_][~][X]| +------------------------------------------+ |Hello, SWT World! | | | | | | | | | | | | | | | | | | | +------------------------------------------+