Jpanel tamanho automaticamente dentro Jframe
Pergunta
Eu tenho uma subclasse JPanel em que posso adicionar buutons, rótulos, tabelas, etc. Para mostrar na tela que eu uso JFrame:
MainPanel mainPanel = new MainPanel(); //JPanel subclass
JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Mas quando eu redimensionar a janela, tamanho do painel não mudam. Como fazer o tamanho do painel a ser o mesmo que o tamanho da janela, mesmo que foi redimensionada?
Solução
Você pode definir um gerenciador de layout como BorderLayout e, em seguida, definir mais especificamente, onde seu painel deve ir:
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);
Isso coloca o painel na área do centro do quadro e deixa-lo crescer automaticamente ao redimensionar o quadro.
Outras dicas
Você precisa definir um gerenciador de layout para o JFrame de usar - Trata-se de como os componentes são posicionados. Um útil é o gerente BorderLayout.
Basta adicionar a seguinte linha de código deve resolver os seus problemas:
mainFrame.setLayout(new BorderLayout());
(Faça isso antes de adicionar componentes ao JFrame)
Se a opção BorderLayout fornecida por nossos amigos doesnot trabalho, tente adicionar ComponentListerner ao JFrame e implementar o método componentResized (evento). Quando o objeto JFrame será redimensionada, este método será chamado. Então, se você escrever o código para definir o tamanho das JPanel neste método, você vai conseguir o resultado pretendido.
Ya, eu sei que esta 'solução' não é bom, mas usá-lo como uma rede de segurança. ;)
Da minha experiência, eu usei GridLayout.
thePanel.setLayout(new GridLayout(a,b,c,d));
= um número de linha, b = número de coluna, c = lacuna horizontal, d = intervalo vertical.
Por exemplo, se eu quiser criar painel com:
- linha ilimitada (definida a = 0)
- 1 coluna (conjunto b = 1)
- intervalo vertical = 3 (d = conjunto 3)
O código está abaixo:
thePanel.setLayout(new GridLayout(0,1,0,3));
Este método é útil quando você quer adicionar JScrollPane a seus JPanel. Tamanho do JPanel dentro de JScrollPane será automaticamente muda quando você adiciona alguns componentes nele, então o JScrollPane irá reiniciar automaticamente o pergaminho bar.
Como outros cartazes disse, você precisa mudar a LayoutManager sendo usado. Eu sempre preferi usar um GridLayout para que o seu código seria:
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);
GridLayout parece mais conceitualmente correto para mim quando você quer que seu painel para ocupar a tela inteira.