Question

Mon problème actuel est que j'ai un cadre JFrame avec un GridLayout 2x2. Et à l'intérieur de l'une des places, j'ai un JPanel qui doit afficher une grille. Je vais avoir une journée sur le terrain avec la bibliothèque java swing ... jetez un oeil

Image

Java étend automatiquement chaque JLabel à l’écran. Je veux que ce soit juste ces carrés bleus (eau) et la bordure noire et non cet espace gris. Est-il possible de définir la taille de ce fichier JPanel de manière permanente de manière à ne pas avoir à modifier la taille du fichier JFrame un million de fois avant d'obtenir la dimension exacte pour que l'espace gris disparaisse?

Je voudrais également définir la taille de ces boutons afin qu'ils ne soient pas si énormes ( BorderLayout est utilisé pour les boutons et TextField)

Était-ce utile?

La solution

Si vous voulez que les deux damiers conservent la même taille, vous devez les avoir chacun dans leur propre JPanel . Définissez chacun de ces JPanel parents pour avoir un type de disposition de GridBagLayout . Définissez la taille préférée pour chaque composant en damier, puis ajoutez-les à leurs conteneurs respectifs. GridBagLayout devrait par défaut placer chaque tableau au centre du JPanel parent. Ainsi, à mesure que la fenêtre sera redimensionnée, la zone parent JPanel sera agrandie ou réduite, mais les composants en damier resteront à la même taille.

Vous pouvez également redimensionner les carrés bleus à la taille voulue en redimensionnant la fenêtre en faisant en sorte que chaque case de contrôle soit un JPanel avec un gestionnaire de présentation BorderLayout et en ajoutant JLabel (avec une couleur de fond bleue) vers son emplacement BorderLayout.CENTER .

En ce qui concerne vos boutons, essayez quelque chose comme ceci:

JPanel theButtonPanel = new JPanel(new BorderLayout());
JButton button1 = new JButton("Fire");
JButton button2 = new JButton("Pass");
JButton button3 = new JButton("Forfiet");

JPanel innerButtonContainer = new JPanel(new Grid(1, 3, 8, 8));
innerButtonContainer.add(button1);
innerButtonContainer.add(button2);
innerButtonContainer.add(button3);

theButtonPanel.add(innterButtonContainer);

Enfin, envisagez l’utilisation d’un outil de conception pour votre interface utilisateur Swing. Netbeans intègre un concepteur une excellente interface utilisateur . Téléchargez Netbeans ici .

Autres conseils

GridBagLayout est ce que vous voulez vraiment utiliser. GridLayout forcera la même taille pour chaque composant de la présentation, quelles que soient les contraintes de taille que vous leur imposez. GridBagLayout est beaucoup plus puissant et compliqué. Étudiez la page de l'API . pour ça. Avec GridBagLayout , les composants ne rempliront pas tout l’espace de la grille si vous ne le souhaitez pas et peuvent même conserver la taille que vous leur demandez. Pour que la taille d'un composant ne change pas, je voudrais définir les trois contraintes de taille disponibles:

water.setPreferredSize(new Dimension(20, 20));
water.setMinimumSize(new Dimension(20, 20));
water.setMaximumSize(new Dimension(20, 20));

Pour vos boutons, j'utiliserais certainement un panneau intérieur sous la forme Bryan mentionne. Vous pouvez utiliser un GridLayout comme il le suggère ou un FlowLayout si vous ne voulez pas que tous les boutons aient la même taille. Ajoutez tous vos boutons à ce panneau intérieur au lieu du panneau principal.

Si vous pouvez setResizeable (false) dans le cadre de niveau supérieur, vous pouvez ensuite configurer votre gestionnaire de disposition pour qu'il attribue la valeur null et code à chaque emplacement et taille par l'intermédiaire de setBounds. C’est ce que je ferais (en fonction du redimensionnement, bien sûr).

J'ai eu du succès à résoudre des problèmes comme ceux-ci avec TableLayout , un gestionnaire de disposition tiers. Vous devrez le télécharger et lire le didacticiel, mais la clé serait de définir la justification sur CENTER lors de l’ajout des boutons JButtons à leurs positions dans la présentation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top