Posicionamento de um 'JMenu' em um 'JMenuBar'

6 respostas
andre_teprom

Olá pessoal,

Esse simples código não está funcionando, pois o menu está centralizado na barra :
JMenu menu1 = new JMenu("Ajuda");
menu1.add(new JMenuItem("Nomeclatura"));
menu1.add(new JSeparator());
menu1.add(new JMenuItem("Sobre..."));
menu1.setAlignmentX( Component.RIGHT_ALIGNMENT ) ;

JMenuBar bar = new JMenuBar();
bar.add(menu1);

outerPanel = new JPanel();
outerPanel.add( bar ) ;
Gostaria que a opção de Ajuda ficasse á direita, que é o padrão dos aplicativos. Estou esquecendo algum detalhe ?

+++

6 Respostas

Eric_Yuzo

Não sei se tem um jeito mais fácil de alinhar os menus, mas uma alternativa seria mudar layout manager do JMenuBar.

andre_teprom

Eric,

Desculpa se a pergunta é básica, mas como eu poderia fazer isso ?
Pressupõe o uso do netbeans ?
( que por sinal, não o tenho instalado )

+++

Eric_Yuzo

Vou passar um exemplo com GridBagLayout, que está na API. Mas se estiver usando MigLayout no seu projeto, aconselho fazer com ele.

JMenuBar bar = new JMenuBar(); bar.setLayout(new GridBagLayout()); // Setei o layout como GridBag GridBagConstraints esquerda = new GridBagConstraints(); // Constraint para menus a esquerda esquerda.anchor = GridBagConstraints.WEST; GridBagConstraints direita = new GridBagConstraints(); // Constraint para menu a direita e com espaçamento direita.anchor = GridBagConstraints.EAST; direita.weightx = 1.0; bar.add(new JMenuItem("Primeiro"), esquerda); // Na hora de adicionar tem que passar uma constraint bar.add(new JMenuItem("Segundo"), esquerda); bar.add(new JMenuItem("Terceiro"), esquerda); bar.add(new JMenuItem("Último"), direita);Não precisa usar exatamente o GridBag, pode ser qualquer layout que atenda sua necessidade. Pode haver uma forma de fazer isso sem mudar o layout, inclusive já cheguei até a pesquisar sobre, mas sinceramente eu desconheço.

andre_teprom:
Pressupõe o uso do netbeans ?
( que por sinal, não o tenho instalado )

Pressuponho apenas que usa swing, por causa do código postado. Acho que a IDE não influencia nisso. Eu mesmo utilizo o Eclipse, mas já usei o Net Beans também.

Eric_Yuzo

Outro detalhe que passou despercebido quando olhei o post a primeira vez. O JFrame tem um método setJMenuBar, que serve para especificar o menu bar vinculado ao frame:

frame.setJMenuBar(bar);Não é necessário adicionar com o método add.

andre_teprom

Maravilha !!!

Eric, procedi conforme a sugestão do post anterior, e funcionou perfeitamente.
Muito obrigado novamente.

+++

Marky.Vasconcelos

Você não precisa de nenhum alinhamento. Apenas o setJMenuBar resolve.

JMenu menu1 = new JMenu("Ajuda");
menu1.add(new JMenuItem("Nomeclatura"));
menu1.add(new JSeparator());
menu1.add(new JMenuItem("Sobre..."));
menu1.setAlignmentX( Component.RIGHT_ALIGNMENT ) ;  

JMenuBar bar = new JMenuBar();
bar.add(menu1);

frame.setJMenuBar( bar ) ;
Criado 6 de janeiro de 2011
Ultima resposta 7 de jan. de 2011
Respostas 6
Participantes 3