ava 3D 與使用者介面
Canvas3D
能夠繪製三維圖形的每塊地區都被稱為是Canvas3D。它是包含了你環境(universe)中物件檢視(view)的長方形。你把畫布(canvas)放進幀(frame)中,於是你就建立了能夠被顯示在畫布中的環境。
下面的例子展示了如何在上下端有標籤的幀中建立畫布。程式能夠以applet或者應用的方式運行。
1 import com.sun.j3d.utils.universe.SimpleUniverse; 2 import com.sun.j3d.utils.geometry.ColorCube; 3 import javax.media.j3d.BranchGroup; 4 import javax.media.j3d.Canvas3D; 5 import java.awt.GraphicsConfiguration; 6 import java.awt.BorderLayout; 7 import java.awt.Label; 8 import java.applet.Applet; 9 import com.sun.j3d.utils.applet.MainFrame;10 public class CanvasDemo extends Applet11 {12 public CanvasDemo()13 {14 setLayout(new BorderLayout());15 GraphicsConfiguration config =16 SimpleUniverse.getPreferredConfiguration();17 Canvas3D canvas = new Canvas3D(config);18 add("North", new Label("This is the top"));19 add("Center", canvas);20 add("South", new Label("This is the bottom"));21 BranchGroup contents = new BranchGroup();22 contents.addChild(new ColorCube(0.3));23 SimpleUniverse universe = new SimpleUniverse(canvas);24 universe.getViewingPlatform().setNominalViewingTransform();25 universe.addBranchGraph(contents);26 }27 public static void main(String[] args)28 {29 CanvasDemo demo = new CanvasDemo();30 new MainFrame(demo, 400, 400);31 }32 }
Java 3D 和 Swing
Canvas3D利用了你電腦的圖形卡以加強效能。不幸的是,這也意味著它不能與Sun的swing使用者介面控制項很好地配合使用。這些控制項被稱為是“輕量級”的。這些輕量級控制項即使應該是在前端的也會被Canvas3D隱藏掉。
對於這個問題我們有若干解決之道:
● 如果你把輕量級和重量級控制項放在不同的容器中,則它們可以在一個螢幕上混用。
● 如果你使用了快顯功能表,那麼JPopupMenu的靜態方法可以修複這個問題:
setDefaultLightWeightPopupEnabled(false);
你也可以使用舊一些的AWT控制項代替swing。