Je ne peux pas comprendre un moyen de redimensionner des composants dans une interface graphique. Certaines étiquettes personnalisées sont ajoutées à un flowLayout qui ne se comporte pas de la manière dont ils devraient être lors de la résolution de la boîte de dialogue. Le panneau est construit à l'aide du cadre de formulaires Jgoodies.
Si vous utilisez ceci, où le flowLayout est ajouté à xy (3, y) p> Le flowLayout se développe et Une barre de défilement montre de si vous utilisez p> Le flowLayout utilise l'espace disponible et les éléments de la deuxième ligne disparaissent de J'aimerais élargir la hauteur de chaque ligne contenant un flowLayout à la Hauteur actuelle du composant. Malheureusement, la taille préférée correspond toujours à la hauteur d'une seule rangée. Sources P> Voici une tentative d'utilisation de Gridbaglayout et enveloppant : p>
p>
p>
Une autre mise en page serait-elle plus appropriée? Le texte audacieux sur la gauche doit être aligné à droite, suivi de la flowlayout. P>
Un ensemble d'étiquettes est ajouté à un JPanel. Ce JPANEL doit utiliser tous les espaces disponibles horizontalement (taille de dialogue moins largeur de l'étiquette de nom de balise) et développer au besoin verticalement. Si la hauteur du JPANEL augmente, alors le dialogue, une barre de défilement verticale doit apparaître (la barre de défilement horizontale n'est jamais visible).
Le dialogue peut montrer plusieurs JPanels qui seront montrés l'un après l'autre (verticalement). P>
3 Réponses :
J'aimerais élargir la hauteur de chaque ligne contenant une flowLayout à la hauteur actuelle du composant. Malheureusement, la taille préférée correspond toujours à la hauteur d'une seule rangée. P> blockQuote>
Layout d'enveloppe gère cela. P>
Cela semble être exactement ce que je cherche. Je vais marquer le message comme répondu quand j'ai pu le tester. Je suis surpris qu'aucun gestionnaire de mise en page standard ne se comporte comme celui-là, car il semble être un cas d'usage manifeste.
J'ai maintenant essayé deux semaines pour que cela fonctionne sans succès. Avec chaque gestionnaire de mise en page, différents problèmes sont arrivés. À l'aide de la Formlayout Jgoodies, la taille du composant est 0 lorsqu'il est nécessaire de calculer la hauteur et la largeur. Avec la grillebaglayout, le redimensionnement automatique ne se comporte pas du tout (obtenu un exemple si quelqu'un veut jeter un oeil). Avec le SpringLayout, les composants se développent toujours verticalement avec des Springultilities.MakeGrid () et entraînent des balises montrant sur une seule ligne lors de l'utilisation de Springultities.MakecompactGrid ().
Avez-vous essayé Miglayout ? C'est le seul gestionnaire de mise en page que j'utilise et je n'ai jamais trouvé de mise en page, je ne pouvais pas le faire faire. P>
Avec l'aide de Rob et à l'aide de son wrappanel et public class GridBagLayoutTagPanel extends JPanel {
private final int NB_TAGS = 5;
private final int NB_TAGVALUES = 50;
public GridBagLayoutTagPanel() {
setLayout(new GridLayout());
ScrollablePanel pTags = new ScrollablePanel(new GridBagLayout());
pTags.setScrollableWidth(ScrollablePanel.ScrollableSizeHint.FIT);
pTags.setBackground(Color.ORANGE);
GridBagConstraints c = new GridBagConstraints();
c.ipadx = 5;
c.ipady = 5;
int rowIndex = 0;
for (int i = 0; i < NB_TAGS; i++) {
// add tag name
JLabel lTagName = new JLabel(String.format("Tag %s:", i));
lTagName.setFont(lTagName.getFont().deriveFont(Font.BOLD));
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = rowIndex++;
c.weightx = 0; // keep minimum size of the cell containing the label when resizing
c.weighty = 0;
pTags.add(lTagName, c);
// add tag values
JPanel pTag = new JPanel(new BorderLayout());
pTag.add(new JLabel("+"), BorderLayout.LINE_START); // label used to add new tags
pTag.add(getWrapPanel(), BorderLayout.CENTER); // the list of tag values
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.weightx = 1; // fill horizontally
c.weighty = 1;
pTags.add(pTag, c);
}
JScrollPane sp = new JScrollPane(pTags);
sp.setBorder(BorderFactory.createEmptyBorder());
add(sp);
}
private JPanel getWrapPanel() {
JPanel p = new JPanel(new WrapLayout(FlowLayout.LEFT, 5, 0));
for (int i = 0; i < NB_TAGVALUES; i++) {
p.add(new JLabel("t" + i));
}
p.setSize(400, 1);
return p;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(new GridBagLayoutTagPanel());
f.setSize(new Dimension(500, 300));
f.setVisible(true);
}
}
Avez-vous essayé d'utiliser le
formdebugutils CODE> Classe et / ou
formdebugpanel code>? Ces outils de débogage me ont aidé quelques fois à voir ce qui se passait réellement
Pourquoi énoncez-vous
flowlayout code> lorsque le code indique clairement que
formlayout code> est utilisé?
Formlayout! = Flowlayout code>.
@Andrewthompson Le formelayout n'est pas le problème. Cela se comporte comme on le dit (pour le deuxième exemple) d'utiliser l'espace horizontal disponible et d'étirer la verticale en fonction de la hauteur préférée de l'écoulement de flowLayout étant ajouté à la formidayout. Le problème est que la hauteur préférée ne change jamais.