[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00196] Java3D とSwing について
◆『世界各国経済情報ファイル』「The World 98 CD-ROM」◆=========
★ 世界各国の経済・地理・社会の様々なデータを収録!
★ コピー&ペースト、ダウンロード機能でとっても便利!!
<<節分特別セール 定価 6,800円 → 4,800円(税、送料込み)>>
お問い合わせ先:日本データベース開発(株) kanzaki@xxxxxxxxxx
============== http://www.ndk.co.jp/06SUBM/saisin.html ==============
はじめまして、池田といいます。よろしくおねがいします。
開発環境は、JDK1.2 + Java3D1.1 + Windows95 です。
現在、Swing上でJava3Dの表示を行っているのですが表示がおかしくなって困っています。
具体的には、JDesktopPane上にJava3Dを表示するJInternalFrameをいく枚か表示させる
アプリケーションなのですが、JInternalFrame同士が重なると重なった部分のフレームの
枠が表示されません。また、フレームを移動するとJava3Dのパネルが遅れて移動します。
これはもしかして、Lightweight ComponentとHeavyweight Component の混在という問題
なのでしょうか。もしそうだとしたら、回避方法は存在するのでしょうか。
アドバイスお願いします。
参考のためにサンプルコードを添付します。
--------------------------------------------------------------------------------
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
class Test1 {
public static void main( String[] args ) {
JFrame frame = new JFrame( "Java3D Test1" );
JDesktopPane desktop = new JDesktopPane();
frame.getContentPane().add( desktop , BorderLayout.CENTER );
frame.setSize( 500 , 500 );
frame.setLocation( 100 , 100 );
frame.setVisible( true );
JIFrame f1 = new JIFrame( "Frame1" );
f1.setBounds( 20 , 20 , 300 , 300 );
desktop.add( f1 );
f1.setVisible( true );
JIFrame f2 = new JIFrame( "Frame2" );
f2.setBounds( 100 , 100 , 300 , 300 );
desktop.add( f2 );
f2.setVisible( true );
}
}
class JIFrame extends JInternalFrame {
public JIFrame( String title ) {
super( title );
JPanel panel = getJ3DPanel();
setClosable( true );
setMaximizable( true );
setIconifiable( true );
setResizable( true );
getContentPane().add( panel , BorderLayout.CENTER );
}
JPanel getJ3DPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
Canvas3D canvas = new Canvas3D( null );
panel.add( "Center" , canvas );
SimpleUniverse universe = new SimpleUniverse( canvas );
BranchGroup root = createSceneGraph();
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph( root );
return panel;
}
BranchGroup createSceneGraph() {
BranchGroup objGroup = new BranchGroup();
TransformGroup objTrans = new TransformGroup();
Transform3D translation = new Transform3D();
objTrans.setTransform( translation );
Shape3D shape = new ColorCube( 0.5 );
objTrans.addChild( shape );
objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
objGroup.addChild( objTrans );
setMouseBehavior( objGroup , objTrans );
return objGroup;
}
private void setMouseBehavior( BranchGroup root , TransformGroup trans ) {
MouseBehavior behavior1 = new MouseRotate();
behavior1.setTransformGroup( trans );
root.addChild( behavior1 );
MouseBehavior behavior2 = new MouseTranslate();
behavior2.setTransformGroup( trans );
root.addChild( behavior2 );
MouseBehavior behavior3 = new MouseZoom();
behavior3.setTransformGroup( trans );
root.addChild( behavior3 );
BoundingSphere bounds=new BoundingSphere( new Point3d( 0.0,0.0,0.0 ) , 100.0 );
behavior1.setSchedulingBounds( bounds );
behavior2.setSchedulingBounds( bounds );
behavior3.setSchedulingBounds( bounds );
}
}
---------------------------------------------------------------
池田 隆志 ( E-Mail : ikeda@xxxxxxxxxx )
(株)NEC情報システムズ