Question

L'autre jour, ce code fonctionnait. J'ai changé certaines choses et les ai relancées et maintenant, cela ne fonctionne pas comme prévu. Évidemment quelque chose que j'ai changé a changé le comportement, mais je suis revenu en arrière et ai annulé tous ces changements et cela ne fonctionne toujours pas. En négligeant cette information (pour commencer), pourquoi ce code ne place-t-il pas une grille JLabels 15x15 à l'intérieur d'un JPanel?

gameBoard.setLayout(new FlowLayout());

for (int i = 0; i < 15; i++)
{
    for (int j = 0; j < 15; j++)
    {
        JLabel tile = new JLabel("");                       
     tile.setHorizontalAlignment(SwingConstants.CENTER);
        tile.setPreferredSize(new Dimension(27, 27));
        tile.setBorder(new EtchedBorder());
        tile.setEnabled(false);

        gameBoard.add(tile);
    }
}

gameBoard est un fichier JPanel défini via le générateur d’interface graphique de NetBeans. Il a une taille préférée, une taille maximale (identique à celle recommandée). Les options redimensionnables horizontales / verticales sont désactivées. Néanmoins, lorsque ce code est exécuté, tous les boutons s’étendent horizontalement dans une rangée sans jamais se rompre.

Si je comprends bien, FlowLayout est censé envelopper les éléments quand ils atteignent la fin de leur élément conteneur. Cela se passait avant aujourd'hui, je ne sais pas vraiment pourquoi ce comportement a cessé?

Était-ce utile?

La solution 4

Je l'ai compris. Apparemment, je devais définir preferredSize dans le code lui-même. Il ne suffit pas de le définir dans la fenêtre de propriétés de Netbeans. Étrange.

Autres conseils

Il serait bien préférable d'utiliser un GridLayout .

GridLayout gridLayout = new GridLayout(15, 15);

La présentation du flux peut avoir changé en raison de l'utilisation d'une nouvelle apparence, de polices différentes ou de la mise à niveau de certaines machines virtuelles Java. Il n'est pas recommandé de définir une présentation de flux pour cet usage, car vous dépendez de tailles sous-jacentes pouvant varier selon les machines virtuelles ou l'apparence.

Dans l’intérêt d’apprendre à un homme à pêcher:

Les systèmes de contrôle de révision sont excellents. Même votre système sauvegarde régulièrement votre source.

Une technique de débogage utile consiste à enlever des choses jusqu'à ce que cela fonctionne. La définition d’une bordure provoque-t-elle une rupture du code? Dans l’autre sens, pouvez-vous écrire un programme trivial qui illustre le problème.

J'ai rencontré un franc succès et maîtrisé l'utilisation de TableLayout . et je le recommanderais à n'importe qui. Vous pouvez définir les colonnes et les lignes en utilisant un nombre spécifique de pixels, ou simplement utiliser TableLayout.PREFERRED pour chaque colonne et / ou ligne. Layout très agréable et flexible. Nous l'utilisons partout.

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