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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top