SimpleUniverse in JPanel

Status
Nicht offen für weitere Antworten.
R

resTive

Gast
Hi ihr,

ich spiele grade ein wenig mit dem SimpleUniverse (Canvas3D) rum und habe versucht das SimpleUniverse in ein JPanel zu stecken, welches in JSplitPanes positioniert ist.
Allerdings wird es mir nicht angezeigt. Es erscheint auch keine Fehlermeldung. Lass ich das Canvas3D direkt auf den ContentPane zeichnen, funktioniert das wunderbar. Kann mir jemand erklären was ich falsch mache, bzw ob das vielleicht so garnicht geht, wie ich das vorhabe?

Hier mal der Code dazu:

Code:
public class Client extends JFrame {
	
	private static Client sInstance;
	private static boolean sIsInitialized;
	
	private JPanel iInformationPanel;
	private JPanel iGraphicPanel;
	private JPanel iStatusPanel;
	
	public static void initialize() {
		if (sInstance == null) {
			sInstance = new Client();
		}
		sIsInitialized = true;
	}
	
	public static boolean isInitialized() {
		return sIsInitialized;
	}
	
	public static Client getInstance() {
		return sInstance;
	}

	private Client() {
		this.setTitle("J3D Experimente");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(new Dimension(1024, 768));
		
		iInformationPanel = new JPanel(new GridBagLayout());
		iInformationPanel.setPreferredSize(new Dimension((int)(this.getWidth()*0.25), (int)(this.getHeight()*0.75)));
		
		iGraphicPanel = new JPanel();
		iGraphicPanel.setPreferredSize(new Dimension((int)(this.getWidth()*0.25), (int)(this.getHeight()*0.75)));
		iStatusPanel = new JPanel(new GridBagLayout());
		
		iInformationPanel.add(new JLabel("Information"));
		iStatusPanel.add(new JLabel("Status"));
		
		
		Canvas3D c3d = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); //So am besten
		SimpleUniverse simpleU = new SimpleUniverse(c3d); //Das VirtualUniverse, hier wird auch schon der View hinzugefügt
		BranchGroup bg = new BranchGroup(); //Haupt-BranchGroup
		bg.addChild(new ColorCube(0.4f/*Größe*/)); //ColorCube wird hinzugefügt

		OrbitBehavior orbit = new OrbitBehavior(c3d, OrbitBehavior.REVERSE_ALL); //OrbitBehavior liegt in dem Paket com.sun.j3d.utils.behaviors.vp
		orbit.setSchedulingBounds(new BoundingSphere());
		simpleU.getViewingPlatform().setViewPlatformBehavior(orbit);

		bg.compile(); //Optimiert das Rendern
		
		simpleU.addBranchGraph(bg); //Fügt den SceneGraph hinzu
		simpleU.getViewingPlatform().setNominalViewingTransform(); //Versetzt die Kamera so, dass man gleich etwas sehen kann
		//So einfach war das :)
		iGraphicPanel.add(c3d); //Vor 1.5: getContentPane().add
		
		JSplitPane lTopSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, iInformationPanel, iGraphicPanel);
		lTopSplitPane.setDividerSize(3);
		JSplitPane lBottomSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, lTopSplitPane, iStatusPanel);
		lBottomSplitPane.setDividerSize(3);

		
		Container lContainer = this.getContentPane();
		lContainer.setLayout(new BorderLayout());
		lContainer.add(lBottomSplitPane, BorderLayout.CENTER);
			
		//this.addComponentListener(new ClientComponentListener());
		this.setLocationRelativeTo(null);
	}
	
	public static void main(String args[]) {
		Client.initialize();
		Client.getInstance().setVisible(true);
	}
}

gruß
resTive
 
R

resTive

Gast
hm. So wie es aussieht, hat es etwas mit dem heavy (hier canvas3d) und lightweight (swing-Komponenten) Problem zu tun.

Vielleicht hat jemand sowas schonmal gemacht und hat nen Tipp für mich?

gruß
resTive
 
R

resTive

Gast
so nach langem lesen und tüfteln funktioniert es nun, in dem ich mir eine eigene von JPanel ableitende klasse gebaut habe.

Code:
public class GraphicPanel extends JPanel {
	SimpleUniverse universe;

	public GraphicPanel() {
		setLayout(new BorderLayout());
		JPopupMenu.setDefaultLightWeightPopupEnabled(false);
		Canvas3D c3d = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); 
		SimpleUniverse simpleU = new SimpleUniverse(c3d);
		
		BranchGroup bg = new BranchGroup();
		bg.addChild(new ColorCube(0.2f));
		bg.compile();

		OrbitBehavior orbit = new OrbitBehavior(c3d, OrbitBehavior.REVERSE_ALL);
		orbit.setSchedulingBounds(new BoundingSphere());
		simpleU.getViewingPlatform().setViewPlatformBehavior(orbit);
		simpleU.getViewingPlatform().setNominalViewingTransform();
		bg.compile();

		simpleU.addBranchGraph(bg);
		this.add(c3d);
	}
}

Prinzipiell kann das abgehakt werden, allerdings verstehe ich den Unterschied nicht. Oder habe ich lediglich ein gewaltiges Brett vorm kopf?

gruß
resTive
 

taejon

Mitglied
Hi

ich habe ein aehnliches Problem (siehe späterer Eintrag "Box nicht sichtbar")

ich habe versucht im Rahmen von awt das zu lösen und mich stark an deinem Konzept der extrapanelklasse gehalten, dummerweise geht das immer noch nicht. Weisst du rat ? Ich vermute dass das Problem ähnlich gelagert ist.
Ich schicke mal meinen neuen Code... vielleicht schaut mal jemand drauf was da faul sein könnte...
Fehler werden nicht geworfen.
Entwicklungsumgebung: Eclipse 3.2 auf PC Win XP
merci im voraus



Code:
import java.awt.Frame;
import java.awt.Dimension;
import java.awt.Label;
import java.awt.Rectangle;
import java.awt.Scrollbar;
import java.awt.TextField;
import java.awt.Window;
import javax.swing.*;
import java.awt.Panel;
import java.awt.GridBagLayout;
import javax.swing.JSlider;
import java.awt.Button;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;  // Muss man komischerweise extra importieren (schwachsinn hoch 3 grrr!!)
// Jetzt die java3D Libs
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.vp.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.geometry.ColorCube;


public class efgtry1 extends Frame {

	private static final long serialVersionUID = 1L;
	private Label label = null;
	private Label label1 = null;
	private Label label2 = null;	
	private Panel panel = null;
//	protected SimpleUniverse myUniverse;
	protected BranchGroup rootBranchGroup;
	
	private Panel getPanel() {
	/*	if (panel == null) {
			panel = new Panel();
			panel.setLayout(new GridBagLayout());
			panel.setBounds(new Rectangle(159, 76, 430, 314));
		}
*/
		return panel;
	}
	
	public efgtry1()    // Standardkonstruktor 
	{
		super(" Berechnung des EFG");
		initialize();
		setSize(800, 700);
		setVisible(true);
	}
	private void initialize() {
		
		label2 = new Label();
		label2.setBounds(new Rectangle(7, 126, 45, 23));
		label2.setText("a0");
		
		label1 = new Label();
		label1.setBounds(new Rectangle(7, 99, 45, 23));
		label1.setText("Sclice");
		
		label = new Label();
		label.setBounds(new Rectangle(7, 72, 45, 23));
		label.setText("Gridsize");
		
		this.setLayout(null);
		this.setSize(604, 402);
		this.setTitle("Frame");
		this.add(label, null);
		this.add(label1, null);
		this.add(label2, null);		
	//	this.add(getPanel());	
	}	
	public static void main(String[] args) 
	{
		efgtry1 efgwin = new efgtry1();
		GraphicPanel gpanel = new GraphicPanel();
		efgwin.show();
	}
}  //  @jve:decl-index=0:visual-constraint="10,10"


public class GraphicPanel extends Panel
{
	SimpleUniverse myUniverse;	
	public GraphicPanel()
	{
	  setLayout(new BorderLayout());
	  Canvas3D myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());	  		
	  SimpleUniverse myUniverse = new SimpleUniverse(myCanvas3D);	  
	  BranchGroup bg = new BranchGroup();
	  bg.addChild(new ColorCube(0.2f));
	  bg.compile();
	  
	  OrbitBehavior orbit = new OrbitBehavior(myCanvas3D, OrbitBehavior.REVERSE_ALL); 
      orbit.setSchedulingBounds(new BoundingSphere()); 
      myUniverse.getViewingPlatform().setViewPlatformBehavior(orbit); 
      myUniverse.getViewingPlatform().setNominalViewingTransform(); 
      bg.compile(); 

      myUniverse.addBranchGraph(bg); 
      this.add(myCanvas3D); 

	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
I Zweite Kamera in einem SimpleUniverse Spiele- und Multimedia-Programmierung 6
H Starthilfe Teil 1: SimpleUniverse Spiele- und Multimedia-Programmierung 7
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
M JPanel mit Graphics2D Objekten mit JScrollpane Spiele- und Multimedia-Programmierung 6
K JPanel wechseln & Neu starten - SnakeSpiel Spiele- und Multimedia-Programmierung 2
A paintComponent in JPanel in JFrame Spiele- und Multimedia-Programmierung 7
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
S Thread und jpanel-paintcomponent kombinierbar?? Spiele- und Multimedia-Programmierung 14
E Animiertes JPanel dynamisch wechseln Spiele- und Multimedia-Programmierung 3
W Panel/JPAnel createImage() Exception Spiele- und Multimedia-Programmierung 2
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
C 2D Sprites an die JPanel Größe (Auflösung) anpassen/skalieren Spiele- und Multimedia-Programmierung 3
F Vektorgrafik in JPanel Spiele- und Multimedia-Programmierung 5
E Active Rendering im FSEM auf ein JPanel? Spiele- und Multimedia-Programmierung 4
L 2D-Spiele ruckeln auf JPanel Spiele- und Multimedia-Programmierung 7
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
X JPanel dynamisch (Koordinatensystem)? Spiele- und Multimedia-Programmierung 30
M Jpanel Graphik speichern Spiele- und Multimedia-Programmierung 6
DamienX Canvas vs JPanel Spiele- und Multimedia-Programmierung 15
S Problem mit JPanel bzw p a i n t Spiele- und Multimedia-Programmierung 6
K stringWidth bei Graphics von JPanel und Printer unterschiedl Spiele- und Multimedia-Programmierung 4
M 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel Spiele- und Multimedia-Programmierung 4
M Jpanel mit Keylistener Spiele- und Multimedia-Programmierung 6
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben