Java3D HelloWorld im SWT Fenster einbinden

whitebrazililan

Grünschnabel
Hallo,

ich arbeite im Moment an meiner Bachelorarbeit "3D-Darstellung der Beladung eines LKW (editierbar per Drag&Drop)".
Dazu arbeite ich mich gerade in Java3D ein. Da die Firma, in der ich meine Arbeit schreibe, allerdings nicht auf Swing als GUI setzt (das habe ich bisher immer gemacht), sondern auf SWT habe ich Probleme selbst ein "HelloWorld"-Programm laufen zu lassen.

Gibt es in SWT eine Methode alla "add", wie sie in der Klasse JFrame in Swing gibt. Beim bisherigen Code wurden die Widgets immer gleich bei deren Initialisierung auf das Layout geklebt. Das ist zum einen bei einem Canvas3D glaub ich schwieriger und zum anderen muss so etwas doch auch nachträglich gehen.

Vielen Dank!
 

InteractiveMesh

Grünschnabel
Hallo,

Infos zum Thema SWT: The Standard Widget Toolkit findet man hier http://www.eclipse.org/swt/

Um ein (schwergewichtiges, AWT) Canvas3D Objekt von Java 3D einzubetten, nutzt man org.eclipse.swt.awt.SWT_AWT. Ich benutze folgenden Composite-Wrapper für Canvas3D:

Code:
import java.awt.BorderLayout;
import java.awt.Frame;

import javax.media.j3d.Canvas3D;

import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;

import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;

// Inner class
private class Canvas3DComposite extends Composite {
	
  Canvas3DComposite(Composite parent, Canvas3D canvas3d) {
    super(parent, SWT.EMBEDDED);
		
    this.setLayout(new FillLayout());
    this.setLayoutData(new GridData(GridData.FILL_BOTH)); // TODO
        
    Frame frame = SWT_AWT.new_Frame(this);    
    frame.add(canvas3d, BorderLayout.CENTER); 

  }
}