Menu e Canvas3D

2 respostas
E

Uso o JMenu e um Canvas3D em um JFrame com BorderLayout, mas quando quero exibir as opções do menu, elas ficam atrás do Canvas3D.
Abaixo segue o codigo que foi compilado com java1.3 e java3d1.3
existe uma linha, que ta até comentada, que quando removida da pra ver os menus, mas caso contrario não da pra ver. Testem o código, por favor, e verifiquem se alguem acha a solução.

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.<em>;

import javax.media.j3d.</em>;

import javax.vecmath.<em>;

import com.sun.j3d.utils.universe.</em>;

import com.sun.j3d.utils.geometry.*;
public class Lab extends JFrame {

private SimpleUniverse u;

private BranchGroup b;

private Canvas3D c;

private JMenuBar jMenuBar1;

private JMenu jMenuArq;

private JMenuItem jMenuArqNovo;

private JMenuItem jMenuArqAbrir;

private JMenuItem jMenuArqSalvar;

private JSeparator jSeparator2;

private JMenuItem jMenuArqSair;

private JMenu jMenuProp;

private JMenuItem jMenuPropPc[];

private JMenu jMenuAjuda;

private JMenuItem jMenuAjudaAjuda;

private JSeparator jSeparator1;

private JMenuItem jMenuAjudaSobre;

private JPanel jPanel;

private static final Color3f FUNDO = new Color3f(0.05f, 0.09f, 0.2f);

private BranchGroup criarCena(SimpleUniverse u) {
BranchGroup b = new BranchGroup();

Transform3D roty = new Transform3D();

roty.rotY(Math.PI/3);

TransformGroup tg = new TransformGroup(roty);

tg.addChild(new ColorCube(0.2f));
b.addChild(tg);

b.compile();

return b;

}
public Lab() {

this.getContentPane().setLayout(new BorderLayout());

GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

c = new Canvas3D(config);

u = new SimpleUniverse©;

b = criarCena(u);

u.getViewingPlatform().setNominalViewingTransform();

u.addBranchGraph(b);

//************************************** adcionar menu ***************************************

jMenuBar1 = new JMenuBar();

jMenuArq = new JMenu(Arquivo);

jMenuArqNovo = new JMenuItem(Novo);

jMenuArq.add(jMenuArqNovo);

jMenuArqAbrir = new JMenuItem(Abrir);

jMenuArq.add(jMenuArqAbrir);

jMenuArqSalvar = new JMenuItem(Salvar);

jMenuArq.add(jMenuArqSalvar);

jSeparator1 = new JSeparator();

jMenuArq.add(jSeparator1);

jMenuArqSair = new JMenuItem(Sair);

jMenuArq.add(jMenuArqSair);

jMenuAjuda = new JMenu(Ajuda);

jMenuAjudaAjuda = new JMenuItem(Ajuda do LVR);

jMenuAjuda.add(jMenuAjudaAjuda);

jSeparator2 = new JSeparator();

jMenuAjuda.add(jSeparator2);

jMenuAjudaSobre = new JMenuItem(Sobre do LVR);

jMenuAjuda.add(jMenuAjudaSobre);

jMenuProp = new JMenu(Propriedades);

jMenuPropPc = new JMenuItem[15];

for (int i=0; i< jMenuPropPc.length; i++){

jMenuPropPc[i] = new JMenuItem(PC+(i+1));

jMenuPropPc[i].setActionCommand(PC+(i+1));

jMenuProp.add(jMenuPropPc[i]);

}
jMenuBar1.add(jMenuArq);

jMenuBar1.add(jMenuProp);

jMenuBar1.add(jMenuAjuda);

setJMenuBar(jMenuBar1);

this.getContentPane().add(“Center”, c); //Comentando esta linha os menus funcionam corretamente

this.setSize(800,600);

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

this.setVisible(true);

} //fim construtor

//********************************************************************************************

public static void main(String argv[]) {

Lab app = new Lab();

app.addWindowListener(new WindowAdapter() {

public void windowclosing(WindowEvent e) {

System.exit(0);

}

});

}

}

2 Respostas

fbanin

Opa, poste o código usando o botão CODE acima…

T+

E
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.media.j3d.*; 
import javax.vecmath.*; 
import com.sun.j3d.utils.universe.*; 
import com.sun.j3d.utils.geometry.*; 

public class Lab extends JFrame { 
private SimpleUniverse u; 
private BranchGroup b; 
private Canvas3D c; 
private JMenuBar jMenuBar1; 
private JMenu jMenuArq; 
private JMenuItem jMenuArqNovo; 
private JMenuItem jMenuArqAbrir; 
private JMenuItem jMenuArqSalvar; 
private JSeparator jSeparator2; 
private JMenuItem jMenuArqSair; 
private JMenu jMenuProp; 
private JMenuItem jMenuPropPc[]; 
private JMenu jMenuAjuda; 
private JMenuItem jMenuAjudaAjuda; 
private JSeparator jSeparator1; 
private JMenuItem jMenuAjudaSobre; 
private JPanel jPanel; 

private static final Color3f FUNDO = new Color3f(0.05f, 0.09f, 0.2f); 

private BranchGroup criarCena(SimpleUniverse u) { 
BranchGroup b = new BranchGroup(); 

Transform3D roty = new Transform3D(); 
roty.rotY(Math.PI/3); 
TransformGroup tg = new TransformGroup(roty); 
tg.addChild(new ColorCube(0.2f)); 

b.addChild(tg); 
b.compile(); 
return b; 
} 


public Lab() { 
this.getContentPane().setLayout(new BorderLayout()); 
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); 
c = new Canvas3D(config); 
u = new SimpleUniverse(c); 
b = criarCena(u); 
u.getViewingPlatform().setNominalViewingTransform(); 
u.addBranchGraph(b); 


//************************************** adcionar menu *************************************** 

jMenuBar1 = new JMenuBar(); 
jMenuArq = new JMenu("Arquivo"); 
jMenuArqNovo = new JMenuItem("Novo"); 
jMenuArq.add(jMenuArqNovo); 
jMenuArqAbrir = new JMenuItem("Abrir"); 
jMenuArq.add(jMenuArqAbrir); 
jMenuArqSalvar = new JMenuItem("Salvar"); 
jMenuArq.add(jMenuArqSalvar); 
jSeparator1 = new JSeparator(); 
jMenuArq.add(jSeparator1); 
jMenuArqSair = new JMenuItem("Sair"); 
jMenuArq.add(jMenuArqSair); 
jMenuAjuda = new JMenu("Ajuda"); 
jMenuAjudaAjuda = new JMenuItem("Ajuda do LVR"); 
jMenuAjuda.add(jMenuAjudaAjuda); 
jSeparator2 = new JSeparator(); 
jMenuAjuda.add(jSeparator2); 
jMenuAjudaSobre = new JMenuItem("Sobre do LVR"); 
jMenuAjuda.add(jMenuAjudaSobre); 
jMenuProp = new JMenu("Propriedades"); 

jMenuPropPc = new JMenuItem[15]; 

for (int i=0; i< jMenuPropPc.length; i++){ 
jMenuPropPc[i] = new JMenuItem("PC"+(i+1)); 
jMenuPropPc[i].setActionCommand("PC"+(i+1)); 
jMenuProp.add(jMenuPropPc[i]); 
} 

jMenuBar1.add(jMenuArq); 
jMenuBar1.add(jMenuProp); 
jMenuBar1.add(jMenuAjuda); 

setJMenuBar(jMenuBar1); 

this.getContentPane().add("Center", c); //Comentando esta linha os menus funcionam corretamente 

this.setSize(800,600); 
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
this.setVisible(true); 


} //fim construtor 


//******************************************************************************************** 
public static void main(String argv[]) { 
Lab app = new Lab(); 
app.addWindowListener(new WindowAdapter() { 
public void windowclosing(WindowEvent e) { 
System.exit(0); 
} 
}); 
} 

}
Criado 14 de abril de 2005
Ultima resposta 14 de abr. de 2005
Respostas 2
Participantes 2