# probleme mit material



## Sac (12. Mrz 2007)

hallo,

ich sitz grad an nem hochschulprojekt ... aufgabe: erstelle ein planetensystem mit hilfe von java3d
habe ein kleines problem ... hab angefangen auf windows zu programmieren hat alles prima funktioniert .... dabei sind leider 2 probleme aufgetreten ... ich habe ein jmenu hinzugefügt doch immer wenn ich dieses öffnen will, verschwindet es hinter meinem canvas3d und wird nur versteckt angezeigt(code weiter unten)

das zweite problem ist folgendes, ich bin auch mac umgestiegen und nun werden die texturen meiner planeten nicht mehr angezeigt, genauso als hätte ich die ambientlights ausgeschaltete die sind aber noch aktiv, auf windows zeigt er sie mir korrekt an... kann mir wer helfen?

code für material:


```
Material mat = new Material(new Color3f(1.0f,1.0f,1.0f),new Color3f(1.0f,1.0f,1.0f),new Color3f(1.0f,1.0f,1.0f),new Color3f(1.0f,1.0f,1.0f),1.0f);
```


code für menubar:


```
JPanel pan = new JPanel(new BorderLayout());
		
		
		
		//Menu erstellen
		JMenuBar menu = new JMenuBar();
		
		
		//Datei-Menu
		JMenu file = new JMenu("Datei");
		JMenuItem reset = new JMenuItem("Wiederherstellen");
		JMenuItem close = new JMenuItem("Schließen");
		file.add(reset);
		file.addSeparator();
		file.add(close);
		file.setFocusable(true);
		file.setFocusCycleRoot(true);
		file.setFocusPainted(true);
		
		JMenu action = new JMenu("Aktion");
		JMenuItem go = new JMenuItem("Gehe zu:");
		JMenuItem voy = new JMenuItem("Voyager 1");
		JMenuItem go_sun = new JMenuItem("Sonne");
		JMenu go_menu = new JMenu();
		
		go_menu.add(go_sun);
		go_menu.setFocusable(true);
		go_menu.setFocusCycleRoot(true);
		go_menu.setFocusPainted(true);
		go.add(go_menu);
		action.add(go);
		action.addSeparator();
		action.add(voy);
		action.setFocusable(true);
		action.setFocusCycleRoot(true);
		action.setFocusPainted(true);
		
		
		//hinzuf¸gen der Menupunkte
		menu.add(file);
		menu.add(action);
		menu.setVerifyInputWhenFocusTarget(true);
		menu.setFocusable(true);
		menu.setFocusCycleRoot(true);
		
		
//		hinzuf¸gen des Menus zum Frame
		
		
		
		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
		Canvas3D canvas3D = new Canvas3D(config);
		canvas3D.setLocation(3, 3);
		//this.getContentPane().add(canvas3D,BorderLayout.CENTER);
		BranchGroup scene = createPlanetsystem();
		SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
		simpleU.getViewingPlatform().setNominalViewingTransform();
		simpleU.addBranchGraph(scene);
		
		BranchGroup bg = new BranchGroup();
		TransformGroup background = new TransformGroup();
		background.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		background.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		    	
    	TextureLoader texload = new TextureLoader("textures/Sterne.jpg", null);
        ImageComponent2D image = texload.getImage();
    	Background bg1 = new Background(image);
    	bg1.setApplicationBounds(new BoundingSphere());
    	bg1.setImageScaleMode(Background.SCALE_FIT_MAX);
    	
    	
    	background.addChild(bg1); 
    	bg.addChild(background);
       
        
        simpleU.addBranchGraph(bg);
        pan.add(canvas3D, BorderLayout.CENTER);
        this.add(pan);
        this.setJMenuBar(menu);
```


danke schon mal

mfg thommes


----------



## Marco13 (12. Mrz 2007)

Zum ersten Punkt: Wenn du irgendwo am Anfang, vor dem initialisieren deines GUIs die Zeile
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
ausführst, sollten die Menüs zu sehen sein. Der Canvas3D ist eine Heavyweight-Component
http://java.sun.com/products/jfc/tsc/articles/mixing/

Zur zweiten Frage: Da kann ich nur spekulieren. Aber zumindest eine Sache ist "gefährlich":
TextureLoader texload = new TextureLoader("textures/Sterne.jpg", null); 
Um Plattformunabhängig zu bleiben, solltest du da
TextureLoader texload = new TextureLoader("textures+" File.separator + "Sterne.jpg", null); 
schreiben, oder ggf. mal testweise die Texturen ein Verzeichnis weiter oben ablegen, und
TextureLoader texload = new TextureLoader("Sterne.jpg", null); 
schreiben. Nur um möglichst schnell einzugrenzen, ob er die Texturen einfach nicht _findet_, oder er sie aus anderen Gründen nicht anzeigen kann (dass kann vmtl. 1000 Ursachen haben - u.U. auch sowas wie ein veralteter Grafikkartentreiber oder so - aber genaues weiß man nicht...)


----------



## Sac (12. Mrz 2007)

danke erstmal ... das erste problem konnte ich mit deinem code lösen prima ... das zweite hat nichts damit zu tun das er die texturen nicht findet, da wenn ich spotlights auf die positionen setze ich die texturen sehe ... is alles sehr tricky ... hab eigentlich alle treiber geupdatet


----------

