Problema com JTabbedPane no OS-X (mac)

5 respostas
kemperacc

Srs,

Estou desenvolvendo uma aplicação desktop/swing para controlar estoque, e nesta janela as outras janelas são abertas e o seu conteúdo colocado em um JTabbedPane, assim, cada janela aberta na verdade vira apenas uma aba na janela principal.

Tudo funciona perfeitamente, exceto se a pessoa utilizar o OS-X com o look and feel padrão do java naquele sistema (AquaLookAndFeel), o que faz com que os ícones das abas fiquem cortados. Alguém já passou por isso e pode me dar uma sugestão?

Obrigado a todos.

[size=18]Look and Feel METAL [/size]

[size=18]Look and Feel NIMBUS [/size]

[size=18]Look and Feel AQUA (mac [/size]

5 Respostas

E

Vou dar um palpite: não lembro de ter visto tabs com ícones em aplicações com Aqua Look & Feel. Se houver tais ícones, então eles teriam de ser bem pequenos, já que os tabs são naturalmente bem baixinhos mesmo nesse Look & Feel. Experimente reduzir bem o tamanho do ícone.

kemperacc

Então, esta é a minha última solução da fila!

Hehehe

Agora, sem brincadeira, aqui o codigo que adiciona uma janela dentro do jtabbedpane:

public void addElementToTab(String texto, Icon icon, JFrame componente, String dica, boolean unico) {
        boolean objEncontrado = false;
        
        //TO-DO: fazer a verificacao se ja existe uma instancia de componente
        //adicionado ao jtabbedpane para mudar a variavel objEncontrado para true
        //evitando que o objeto seja adicionado mais uma vez.


        if (unico == true && objEncontrado == false || unico == false) {
            JPanel tab = new JPanel();
            tab.setOpaque(false);

            JButton tabCloseButton = new JButton(new javax.swing.ImageIcon(getClass().getResource("/br/com/omegacodigos/ultra/swing/icones/icone-fechar-12x12.png")));
            tabCloseButton.addActionListener(new ButtonActionListener(componente) {

                public void actionPerformed(ActionEvent e) {
                    tabPrincipal.remove(getFrame().getRootPane());
                    super.getFrame().dispose();
                }
            });

            tabCloseButton.setBorder(BorderFactory.createEmptyBorder());
            tabCloseButton.setOpaque(false);

            JLabel lblTitulo = new JLabel(texto);
            lblTitulo.setMinimumSize(new Dimension(100, lblTitulo.getHeight()));
            lblTitulo.setIcon(icon);

            tab.add(lblTitulo, BorderLayout.WEST);
            tab.add(tabCloseButton, BorderLayout.EAST);


            this.tabPrincipal.addTab(null, icon, componente.getRootPane(), dica);
            this.tabPrincipal.setTabComponentAt(tabPrincipal.getTabCount() - 1, tab);
            this.tabPrincipal.setSelectedIndex(tabPrincipal.getTabCount() - 1);

        }

    }

Vejam que eu crio um JPanel, e adicono nele um jlabel com o texto e o icone e um botao, depois utilizo o setTabComponentAt para definir o meu jpanel como sendo o componente, nos outros laf funciona perfeito, apenas no Aqua que ta dando esse pau.

dyorgio

Quando vc quer programar pro mac e usar o look do mac
tens que seguir o padrão do mac.

não adianta inventar coisas, usuario mac gosta de tudo igual o Mac OsX.

tire os icones.

e use no lugar uma UnifiedToolBar…

olhe aqui : http://explodingpixels.wordpress.com

e aqui : http://code.google.com/p/macwidgets/

ai encha o teu programa de if (isMac())

soh assim :slight_smile:

dyorgio

Só para completar…os programas que usam tabbedpane no mac
são todos oriundos de outros SOs…
pois tabbedpane nem é um componente mac oficial.

kemperacc

Entao acho que vou deixar como esta mesmo, pois ao acessar o programa, na janela de login tem um combo para o usuario escolher o look. este combo ja inicia com o look padrao do sistema selecionado (gtk, windowslaf, aqua, etc).

vou meter um hardcode la na funcao que carrega o laf default do sistema

if (laf == "aqua...")
           laf = "Nimbus...";

ai no mac o laf padrao do meu sistema vai ser o nimbus, se o usuario escolher o aqua, problema dele.

afinal, oficialmente meu sistema so da suporte ao metal e ao nimbus, embora ate hoje nao havia tido nenhum problema com nenhum outro.

obrigado

Criado 5 de março de 2010
Ultima resposta 6 de mar. de 2010
Respostas 5
Participantes 3