Botões ao lado de um menu

6 respostas
M

Boa noite,

estou tentando fazer os botões da minha interface gráfica principal ficarem ao lado de alguns menus, como nas imagens desse site.

O que eu tentei:
- Colocar uma JMenuBar ao lado de uma JToolBar, dentro de um painel com FlowLayout para a esquerda;
- Colocar a JMenuBar dentro da JToolBar;
- Colocar os menus na JToolBar;

Em todas elas alguma coisa ficou esquisito.

A melhor coisa que conseguir fazer foi adicionar os botões diretamente na JMenuBar principal, mas os menus ficaram enormes, acompanhando a geometria dos botões.
[img]http://img213.imageshack.us/img213/8443/capturadetelasgps10beta.png [/img]

Eu queria algo semelhante a isso, mas que a geometria dos menus fosse preservada.

Alguém poderia me dar uma luz? Não acredito que seja algo complicado, to me sentindo somar 2+2 e achar 5 :(

<>
package com.venus.ui;

import java.awt.EventQueue;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UIManager;

/**
 * Apenas um teste =D
 */
public class ApplicationWindow extends JFrame {

    // nossa barra de menus
    JMenuBar menuBar;
    String[] menus = new String[]{
        "Arquivo",
        "Ações",
        "Ferramentas",
        "Ajuda"
    };
    // referencia para alguns ícones
    String[] iconRef = new String[]{
        "/com/venus/rsrc/icons/document-new.png",
        "/com/venus/rsrc/icons/document-open.png",
        "/com/venus/rsrc/icons/document-save.png",
        "/com/venus/rsrc/icons/document-save-as.png",
        "/com/venus/rsrc/icons/edit-undo.png",
        "/com/venus/rsrc/icons/edit-redo.png",
        "/com/venus/rsrc/icons/document-properties.png"
    };

    /**
     * Construtor
     */
    public ApplicationWindow() {
        // instanciando
        menuBar = new JMenuBar();
        for (int i = 0; i < menus.length; i++) {
            JMenu menu = new JMenu(menus[i]);
            for (int j = 0; j < 4; j++) {
                JMenuItem item = new JMenuItem("Item " + (j + 1));
                menu.add(item);
            }
            menuBar.add(menu);
        }

        // adicionando botões aa barra de menus
        // FIXME: é possível ajustar a geometria dos menus (?)
        for (int i = 0; i < iconRef.length; i++) {
            JButton button = new JButton(new ImageIcon(getClass().getResource(iconRef[i])));
            button.setBorderPainted(false); // para o botão ficar com aparência de quando está numa JToolBar
            menuBar.add(button);
        }

        // configurando nossa janela
        setJMenuBar(menuBar);
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    JFrame.setDefaultLookAndFeelDecorated(true);
                    String sysLaf = UIManager.getSystemLookAndFeelClassName();
                    UIManager.setLookAndFeel(sysLaf);
                    new ApplicationWindow().setVisible(true);
                } catch (Exception ex) {
                    System.out.println("Ah não =(");
                    ex.printStackTrace();
                }
            }
        });
    }
}

6 Respostas

0

Fala marcos

recarrega sua imagem ai para que possamos analisar juntos ^^

flw um abraço .

M

Opa,

editei o post original, coloquei um código que faz mais ou menos o que quero… mas ainda assim não ficou a meus gosto =( os botões dos menus principais acompanharam a geometria dos botões.

D

marcos.9306 desculpe por intrometer neste tópico e não poder ajudar, mas fiqueii extremamente IMPRESSIONADO com o layout do seu programa… Muito mesmo… Pode me dizer como você fez?

Se quiser me add no msn por favor:
[email removido]

E

Já tentou usar um border layout e deixar o menu na west e o resto no center?

Bem eu acho o border layout uma bela droga, mas no seu caso pode ser útil. Apesar de que problemas com redimensionamento são quase certos.

Bem, se você quer limitar o tamanho do menu, recomendo colocar alguma coisa pra ocupar o lugar(isso é mais complicado do que parece). Tente os seguintes passos:

1.Crie um Jpanel com BoxLayout, eixo Y.
2.crie um vertical glue nesse mesmo Jpanel(senão souber o que é isso, de uma pesquisada)
3.Insira a JMenuBar no painel
4.Crie outro painel, flow layout mesmo.
5.Insira o primeiro painel nesse que você acabou de criar
6.Insira um separator nesse ultimo painel
7.Insira tua Toolbar no último painel

Agora jogue esse painel pro topo de algum jeito.

Isso é se você quiser fazer manualmente, mas o melhor mesmo é usar aqueles troços do netbeans de drag’n drop. Talvez você tenha que ajustar alguns tamanhos, mas isso é com você.

Se ainda tiver dúvidas, posta aí.

R

eu nao entendi direito as sugestões que deram…

por mim criaria 2 paineis ( 1 pros botões e outro pros ícones ), ambos com a jmenubar… e alinharia os dois… pronto… sem stress

mas se vc tiver tempo e o sistema for realmente foda, pode criar um menu assim no proprio lookandfeel e dae poderia usar o padrão em qq lugar do projeto…

ps: ficou bom o visual… eu deixaria assim… =)

M

Já usei BorderLayout, FlowLayout, coloquei 9³³ painéis na tela, mas o maior problema é que a barra de menu insiste em ficar com seu desenho e com suas cores, mesmo tirando sua opacidade e totalmente desalinhada, parece até que tem vontade própria.

Essa tela foi feita no netbeans, a única coisa que fiz foi adicionar botões diretamente na barra de menus, mas como disse, os menus acompanham a geometria dos botões.

Dúvida: é possível fazer um menu abrir sem que ele esteja necessariamente em uma JMenuBar? Isso resolveria o problema, pois seria apenas o trabalho de adicionar os menus antes dos botões na barra de ferramentas ou em um painel qualquer…

Criado 25 de janeiro de 2011
Ultima resposta 27 de jan. de 2011
Respostas 6
Participantes 5