Java 3D 教程:6. Java 3D 與用戶界面


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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM