2011-06-07 30 views
0

我沒有設法通過使用MouseRotate將用戶鼠標交互到ColorCube。但是,當我使用KeyNavigatorBehaviour時,我可以根據需要使用鍵盤控制多維數據集。Java3D和行爲:KeyNavigatorBehaviour工作正常,但不是MouseRotate

下面的代碼我用來測試MouseRotate:

import javax.media.j3d.BoundingSphere; 
import javax.media.j3d.BranchGroup; 
import javax.media.j3d.GraphicsConfigTemplate3D; 
import javax.media.j3d.TransformGroup; 
import javax.swing.JFrame; 
import javax.vecmath.Point3d; 

import com.sun.j3d.exp.swing.JCanvas3D; 
import com.sun.j3d.utils.behaviors.mouse.MouseRotate; 
import com.sun.j3d.utils.geometry.ColorCube; 
import com.sun.j3d.utils.universe.SimpleUniverse; 


public class MovingAroundCube extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public MovingAroundCube(){ 
     setTitle("Moving around cube"); 
     setSize(300,300); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 

     JCanvas3D jCanvas3D = new JCanvas3D(new GraphicsConfigTemplate3D()); 
     jCanvas3D.setSize(300, 300); 
     add(jCanvas3D); 
     SimpleUniverse universe = new SimpleUniverse(jCanvas3D.getOffscreenCanvas3D()); 
     universe.getViewingPlatform().setNominalViewingTransform(); 
     universe.addBranchGraph(createSceneGraph()); 
    } 

    public BranchGroup createSceneGraph() { 
     BranchGroup objRoot = new BranchGroup(); 

     TransformGroup listenerGroup = new TransformGroup(); 
     listenerGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 
     listenerGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); 
     objRoot.addChild(listenerGroup); 

     //KeyNavigatorBehavior behaviour = new KeyNavigatorBehavior(listenerGroup); 
     MouseRotate behaviour = new MouseRotate(listenerGroup); 
     behaviour.setSchedulingBounds(new BoundingSphere(new Point3d(), 100)); 

     listenerGroup.addChild(behaviour); 
     listenerGroup.addChild(new ColorCube(0.4)); 

     return objRoot; 
    } 

    public static void main(String[] args) { 
     new MovingAroundCube().setVisible(true); 
    } 


} 

如果我取消註釋行創建KeyNavigatorBehaviour和註釋行創建MouseRotate,用戶交互這段時間是可能的。

那麼,爲什麼立方體不能對鼠標做出反應(當我使用MouseRotate行爲實例時)?

任何幫助將不勝感激。

系統:是Xubuntu 11.04 Java3D的版本:1.5.2

回答

0

有來解決這一難題有兩種方式:

  • 使用這個構造:

    MouseRotate behaviour = new MouseRotate(jCanvas3D, listenerGroup); 

  • 只要沒有添加MouseListeners啓用鼠標事件:因爲「setFocusable(真)」在JCanvas3D設置

    import java.awt.AWTEvent; 

    JCanvas3D jCanvas3D = new JCanvas3D(new GraphicsConfigTemplate3D()) { 
     { 
      this.enableEvents(AWTEvent.MOUSE_EVENT_MASK | 
           AWTEvent.MOUSE_MOTION_EVENT_MASK | 
           AWTEvent.MOUSE_WHEEL_EVENT_MASK); 
     } 
    }; 

啓用按鍵事件。

八月,InteractiveMesh

+0

非常感謝:)。我用第一種可能性進行管理,但不是用秒提示=> this.enableEvents似乎不被認爲是Java3D的一部分。 – loloof64 2011-06-09 07:28:18

相關問題