Dimensões de um jFrame

1 resposta
capelari1337

Bom dia, estou com um problema que está já alguns dias me causando dor de cabeça, pesquisei pelo google porém não achei nada que pudesse me ajudar. É o seguinte, eu tenho um jFrame, dentro dele um jScrollPane, e dentro dele um JtabbedPane, dentro dele um jPanel para cada aba. Acontece que, possuo 11 abas diferentes no jTabbedPane, e umas tem mais informações que outras, porém quando estou nas abas que possuem menor conteúdo, acaba sobrando um espaço cinza abaixo que é desnecessário, que eu não gostaria que aparecesse, ou seja gostaria de ajustar as dimensões de acordo com a aba selecionada. Já tentei setar todas as dimensões, de várias maneiras e combinações diferentes, porém sem sucesso. Alguém já passou por um problema parecido ou saiba como solucionar ?

1 Resposta

D

Sim, mas redimensionar o JFrame não é a melhor opção pois isso causaria um problema de usabilidade. O ideal seria preencher aquele espaço com algum conteúdo, poderia juntar algumas abas ou retirar essas abas e colocar num JDialog acessível por menu ou botão.

final JFrame f = new JFrame();
   final JTabbedPane tabbedPane = new JTabbedPane();
   
   // TESTE, o content é o conteúdo.
   JPanel[] content = {new JPanel(), new JPanel()};
   content[0].setPreferredSize(new Dimension(400, 400)); // adiciona um tamanho
   content[1].setPreferredSize(new Dimension(200, 200)); // adiciona um tamanho
   
   int N = content.length;
   JPanel[] holders = new JPanel[N];
   for (int i = 0; i < N; i++) {
       holders[i] = new JPanel();
       holders[i].add(content[i]);
       tabbedPane.addTab("" + i, holders[i]);
   }
   
   tabbedPane.addChangeListener(e->{
       Dimension d = new Dimension(0,0);
       for (int i = 0; i < N; i++) {
           if (i != tabbedPane.getSelectedIndex()) {
               holders[i].setPreferredSize(d);
           } else {
               holders[i].setPreferredSize(content[i].getPreferredSize());
           }
       }
       f.pack();
   });
   f.add(tabbedPane);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.pack();
   f.setVisible(true);
Criado 29 de junho de 2018
Ultima resposta 30 de jun. de 2018
Respostas 1
Participantes 2