Taille automatiquement JPanel dans JFrame

J’ai une sous-classe JPanel sur laquelle j’ajoute des boutons, des étiquettes, des tableaux, etc. Pour l’afficher à l’écran, j’utilise 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); 

Mais lorsque je redimensionne la fenêtre, la taille du panneau ne change pas. Comment faire pour que la taille du panneau soit la même que la taille de la fenêtre même si elle a été redimensionnée?

Vous pouvez définir un gestionnaire de disposition tel que BorderLayout, puis définir plus précisément l’emplacement de votre panneau:

 MainPanel mainPanel = new MainPanel(); JFrame mainFrame = new JFrame(); mainFrame.setLayout(new BorderLayout()); mainFrame.add(mainPanel, BorderLayout.CENTER); mainFrame.pack(); mainFrame.setVisible(true); 

Cela place le panneau dans la zone centrale du cadre et lui permet de s’agrandir automatiquement lors du redimensionnement du cadre.

Vous devez définir un gestionnaire de disposition à utiliser pour JFrame – Cela concerne le positionnement des composants. Le gestionnaire BorderLayout est utile.

Ajouter simplement la ligne de code suivante devrait résoudre vos problèmes:

 mainFrame.setLayout(new BorderLayout()); 

(Faites ceci avant d’append des composants à JFrame)

Si l’option BorderLayout fournie par nos amis ne fonctionne pas, essayez d’append ComponentListerner à JFrame et d’implémenter la méthode ComponentResized (event). Lorsque l’object JFrame sera redimensionné, cette méthode sera appelée. Donc, si vous écrivez le code pour définir la taille du JPanel dans cette méthode, vous obtiendrez le résultat souhaité.

Oui, je sais que cette “solution” n’est pas bonne, mais utilisez-la comme filet de sécurité. 😉

D’après mon expérience, j’ai utilisé GridLayout.

  thePanel.setLayout(new GridLayout(a,b,c,d)); 

a = numéro de ligne, b = numéro de colonne, c = espace horizontal, d = espace vertical.

Par exemple, si je veux créer un panneau avec:

  • ligne illimitée (set a = 0)
  • 1 colonne (ensemble b = 1)
  • espace vertical = 3 (ensemble d = 3)

Le code est ci-dessous:

  thePanel.setLayout(new GridLayout(0,1,0,3)); 

Cette méthode est utile lorsque vous souhaitez append JScrollPane à votre JPanel. La taille du fichier JPanel dans JScrollPane change automatiquement lorsque vous y ajoutez des composants. Le JScrollPane réinitialise alors automatiquement la barre de défilement.

Comme d’autres affiches l’ont dit, vous devez changer le gestionnaire LayoutManager utilisé. J’ai toujours préféré utiliser GridLayout pour que votre code devienne:

 MainPanel mainPanel = new MainPanel(); JFrame mainFrame = new JFrame(); mainFrame.setLayout(new GridLayout()); mainFrame.pack(); mainFrame.setVisible(true); 

GridLayout me semble plus correct du sharepoint vue conceptuel lorsque vous souhaitez que votre panneau occupe tout l’écran.