プロが教える店舗&オフィスのセキュリティ対策術

java3D ボタンクリックにより点を動かすために下記のようにソースコードを作成しましたが、全く変化なしです。どこをどうすればよいでしょうか?
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;
import javax.swing.JApplet.*;
import javax.swing.JFrame.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.applet.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.picking.*;
import com.sun.j3d.utils.picking.behaviors.*;

public class J3D82 extends JApplet
{
JButton b1;
GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas=new Canvas3D(config);
SimpleUniverse universe=new SimpleUniverse(canvas);
BranchGroup root=new BranchGroup();

TransformGroup trans1=new TransformGroup();

Transform3D tr=new Transform3D();
Shape3D gggrid1=null;
public J3D82()
{
setLayout(new BorderLayout());
add(canvas,BorderLayout.CENTER);
JPanel panel=new JPanel();
GridLayout g1=new GridLayout(1,1);
add(panel,BorderLayout.NORTH);
JButton b1=new JButton("移動");
panel.setLayout(g1);
panel.add(b1);

root.setCapability(BranchGroup.ALLOW_DETACH);
root.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);


trans1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
trans1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
root.addChild(trans1);
double x=0.2;
double y=0.2;
double z=0.2;
Point3d[] po1=new Point3d[2];
po1[0]=new Point3d(x,y,z);
po1[1]=new Point3d(x,-y,-z);
float[] colorPo1={1.0f,0.0f,0.0f,
1.0f,0.0f,0.0f};
PointArray ge1=new PointArray(po1.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3);
ge1.setCoordinates(0,po1);
ge1.setColors(0,colorPo1);

Appearance appp1=new Appearance();
appp1.setCapability(Appearance.ALLOW_POINT_ATTRIBUTES_READ);
appp1.setCapability(Appearance.ALLOW_POINT_ATTRIBUTES_WRITE);

PointAttributes ppo1=new PointAttributes();
ppo1.setPointSize(25.0f);
ppo1.setPointAntialiasingEnable(true);

appp1.setPointAttributes(ppo1);


Shape3D gggrid1=new Shape3D(ge1,appp1);
gggrid1.setCapability(Shape3D.ALLOW_GEOMETRY_READ);
gggrid1.setCapability(Shape3D.ALLOW_GEOMETRY_WRITE);
trans1.addChild(gggrid1);



universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(root);

b1.addActionListener(new Listener1());

}
public class Listener1 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1){
Transform3D tr=new Transform3D();
Vector3d vector=new Vector3d(0.2,0.1,0.0);
trans1.getTransform(tr);
tr.setTranslation(vector);
trans1.setTransform(tr);
trans1.addChild(gggrid1);
}
}
}
public static void main(String[] args)
{
JFrame f= new JFrame();
J3D82 frame=new J3D82();
frame.init();
f.getContentPane().add(frame,BorderLayout.CENTER);
f.setSize(500,500);
f.setTitle("Kuukan:点移動ボタン");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}

A 回答 (1件)

問題部分を抜き書きすると以下のようになります。


public class J3D82 extends JApplet {
JButton b1;// class field
public J3D82(){
JButton b1=new JButton("移動");// method内 local 変数として、宣言し直されている
// class fieldのb1に代入するなら、行頭のクラス型宣言は不要
}

public class Listener1 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==b1){// class fieldを見ているが、インスタンスが代入されていないので、trueになることはない
}
}
}
}
    • good
    • 0
この回答へのお礼

hrm_mmmさん、ほんとにありがとうございました!
早速、hrm_mmmさんの回答のように直し実行するとボタンクリックにより、うまく点が平行移動しました。
hrm_mmmさん、感謝です。

お礼日時:2007/09/17 15:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!