Forum Clubic

[Java] (IHM) Box dans des Box - alignement des Box filles dans la mère

J’ai une Box mère que j’ai appelée container et qui est initialisée ainsi :

Box container = Box.createVerticalBox();

Dans cette Box mère, je veux mettre des JLabel (les uns en dessous des autres donc, vu que j’ai utilisé Box.createVerticalBox()), mais j’aimerais bien pouvoir définir l’alignement horizontal de ces Box filles, parce qu’en faisant :[quote=""]
Box container = Box.createVerticalBox();
Box currentLine = null; 

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 1"));
container.add(currentLine);

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel(“Label 2”));
container.add(currentLine);
[/quote]
J’obtiens les deux labels l’un au dessus de l’autre mais centrés dans la Box mère (container), j’aimerais, par exemple, que le premier soit collé au côté gauche de la Box mère et l’autre centré.

J’ai passé près de 3 heures a essayer divers méthodes (setAlignementX(), setBounds(), Box.createHorizontalGlue(), …) sur les Box filles et/ou sur la Box mère sans succès :frowning:

Est-ce que l’alignement au centre est inhérent au Box ou bien j’ai raté un truc ?

Moi quand j’arrivais à rien, je passais au GridBagLayout …

N’oublie pas que les labels sont tellement formidables qu’ils ont toujours la même largeur et hauteur… (oui donc, le texte ne va pas à la ligne)

J’ai trouvé un truc bizarre… mais qui a le rendu que je voulais :
J’ai rajouté un VerticalStrut dans ma Box fille (qui est horizontale) et ça étends la largeur de ma Box fille au maximum (de manière à ce que ses côté gauche et droit soient respectivements confondus avec les côtés gauche et droit de la Box mère).

Au final, cela donne ceci :

Box container = Box.createVerticalBox();
Box currentLine = null; 

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 1"));
currentLine.add(Box.createVerticalStrut(0));
container.add(currentLine);

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 2"));
currentLine.add(Box.createVerticalStrut(0));
container.add(currentLine);

Ce que je pige pas, c’est pourquoi dans une HorizontalBox tu met dans VerticalStrut ? C’est pas des HorizontalStrut ?

Essaye de faire des screenshots voir le problème en live :slight_smile:

Oui, moi aussi j’ai trouvé ça un peu bizarre… j’avais bien commencé par des HorizontalStrut, mais j’ai voulu tester pour le fun les VerticalStrut (autant s’amuser quand on est bloqué ;))…

Voici des screenshots :

Sans Struts du tout :

Box container = Box.createVerticalBox();
Box currentLine = null;

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 1"));
currentLine.setBorder(BorderFactory.createEtchedBorder());
container.add(currentLine);

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 2"));
currentLine.setBorder(BorderFactory.createEtchedBorder());
container.add(currentLine);

Struts vertical :

Box container = Box.createVerticalBox();
Box currentLine = null;

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 1"));
currentLine.add(Box.createVerticalStrut(0));
currentLine.setBorder(BorderFactory.createEtchedBorder());
container.add(currentLine);

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 2"));
currentLine.add(Box.createVerticalStrut(0));
currentLine.setBorder(BorderFactory.createEtchedBorder());
container.add(currentLine);


Struts horizontal :

Box container = Box.createVerticalBox();
Box currentLine = null;

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 1"));
currentLine.add(Box.createHorizontalStrut(0));
currentLine.setBorder(BorderFactory.createEtchedBorder());
container.add(currentLine);

currentLine = Box.createHorizontalBox();
currentLine.add(new JLabel("Label 2"));
currentLine.add(Box.createHorizontalStrut(0));
currentLine.setBorder(BorderFactory.createEtchedBorder());
container.add(currentLine);

J’ai rajouté des bordures aux Box filles pour mieux voir leur limites

Bizarre hein ?

La truc mère ça serait pas un BorderLayout par hasard? Et tu le foutrais pas au centre? Essaye voir à l’est ou à l’ouest (EAST, WEST)

En effet la Box mère est dans le contentPane (d’une JFrame) dont le layout est un BorderLayout.
Mais que j’ajoute la box mère au centre (CENTER), à gauche ou à droite, le problème reste le même (Box fille centrée à l’intérieur de la zone si y’a pas de Struts).

Autre solution, rajouter une HorizontalGlue() à la Box fille :slight_smile:

Et toi tu veux faire un truc ressemblant à quoi? (j’ai fais duSwing, faut bien que je mette ça en pratique, mais si je trouve que les layout sont pas terribles…)

Hum… Je ne sais pas encore trop quel agencement final je désire, c’est comme en Web, il faut que je vois le résultat à l’écran pour être certain que j’aime ou pas.
Mais en gros, je veux un petit texte qui précède une liste de parties (texte + bouton)…

Cependant, je suis tombé sur les JPanel avec les TitledBorder+EtchedBorder qui sont du plus bel effet (pour ce que je désire).

Vi j’adore assez les titledBorder :slight_smile: mais truc super intelligent : les bordures font partie du dessin du composant… donc si tu crée une bordure, t’es niqué si tu redessine le composant car faut les gérer…

pas logique tout ça :x