0

操作可能なJzy3Dグラフを表示するアプレットを作成しようとしています。現在、グラフを表示することができましたが、とにかく影響を与えることはできません。アプレットは現在ユーザー入力を検索していないため、これは理にかなっています。

ユーザー入力(マウスの移動、クリックなど)をどのように取得する必要がありますか?アプレットの入力を取得してJzy3Dに送信するメッセンジャークラスを作成して、それを使って動きを処理することもできると思いますが、それは非常に複雑に思えます。コミュニティディスカッション掲示板を見ると、JOGLAppletLaucherを使用することが提案されました。この問題を回避することがそのポイントですか?もしそうなら、それはどのようにそうすることになっていますか?

編集:私は今、JOGLAppletLauncher(およびその後継のJNLPAppletLauncher)の要点を理解していると思いますが、ユーザー入力をどのように送信するかという問題は依然として残っています。何か案は?

私の現在のコード:

package daniel.work;

import java.applet.Applet;

import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

import com.sun.opengl.util.JOGLAppletLauncher;

public class SimpleApplet extends JApplet {

  public void start(){
      try{
          SwingUtilities.invokeAndWait(new Runnable(){
              public void run(){

                  add(ScatterCanvas.generateCanvas());

              }
          });
      }
      catch(Exception e){
          System.out.println(e);
      }
  }
}

package daniel.work;

import java.awt.Canvas;

import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.demos.AbstractDemo;
import org.jzy3d.demos.Launcher;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.Scatter;


public class ScatterCanvas extends AbstractDemo{

    public static Canvas generateCanvas(){
            // Create the dot cloud scene and fill with data
            int size = 2000;
            float x;
            float y;
            float z;
            float a;

            Coord3d[] points = new Coord3d[size];
            Color[]   colors = new Color[size];

            for(int i=0; i<size; i++){
                    x = (float)Math.random() - 0.5f;
                    y = (float)Math.random() - 0.5f;
                    z = (float)Math.random() - 0.5f;
                    points[i] = new Coord3d(x, y, z);
                    a = 0.25f + (float)(points[i].distance(Coord3d.ORIGIN)/Math.sqrt(1.3)) / 2;
                    colors[i] = new Color(x, y, z, a);
            }

            Scatter scatter = new Scatter(points, colors);
            chart = new Chart();
            chart.getScene().add(scatter);
            return (Canvas) chart.getCanvas();
    }


    protected static Chart chart;

    @Override
    public void init() throws Exception {
        // TODO Auto-generated method stub

    }

}

4

1 に答える 1

0

とった!これが私のコードです。また、generateScatterを変更して、ICavnasではなくチャート「リターンチャート」を返すようにしました。

package myjogl;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.SwingUtilities;

import org.jzy3d.chart.Chart;
import org.jzy3d.chart.controllers.mouse.ChartMouseController;
import org.jzy3d.chart.controllers.thread.ChartThreadController;
import org.jzy3d.plot3d.rendering.canvas.ICanvas;


@SuppressWarnings("serial")
public class JzyApplet extends JApplet implements ActionListener{

private Chart chart = null;
private ICanvas canvas = null;

public void init(){
    try{
        SwingUtilities.invokeAndWait(new Runnable(){
            public void run(){
                chart = ScatterCanvas.generateCanvas(); //this just returns a chart object with a scatter object
                canvas = chart.getCanvas();

                add((Component) canvas);                
            }
        });     
    }
    catch(Exception e){
        System.out.println(e);
    }   

    ChartMouseController mouse   = new ChartMouseController();

    chart.addController(mouse);


    ChartThreadController thread = new ChartThreadController();
    mouse.addSlaveThreadController(thread);
    chart.addController(thread);

    thread.start();

}

@Override
public void actionPerformed(ActionEvent e) {}

public void zoom(){
    float value = canvas.getView().getBounds().getXmax()-10;
    canvas.getView().getBounds().setXmax(value);
    canvas.getView().shoot();
}


}
于 2013-01-04T20:40:09.990 に答える