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 Applet 11 { 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。
