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?
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:
publicvoidaddElementToTab(Stringtexto,Iconicon,JFramecomponente,Stringdica,booleanunico){booleanobjEncontrado=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){JPaneltab=newJPanel();tab.setOpaque(false);JButtontabCloseButton=newJButton(newjavax.swing.ImageIcon(getClass().getResource("/br/com/omegacodigos/ultra/swing/icones/icone-fechar-12x12.png")));tabCloseButton.addActionListener(newButtonActionListener(componente){publicvoidactionPerformed(ActionEvente){tabPrincipal.remove(getFrame().getRootPane());super.getFrame().dispose();}});tabCloseButton.setBorder(BorderFactory.createEmptyBorder());tabCloseButton.setOpaque(false);JLabellblTitulo=newJLabel(texto);lblTitulo.setMinimumSize(newDimension(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.
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.