est-il un moyen look-and-feel-indépendant d'aligner un composant (par exemple un JLabel
) horizontalement avec le texte d'un JCheckBox
?Aligner un JLabel avec le texte d'une JCheckBox
J'essaie d'utiliser les valeurs du UIDefaults
pour prédire l'emplacement du texte par rapport au coin supérieur gauche du JCheckBox
. J'ai trouvé une combinaison qui donne le bon résultat pour le métal, Windows, Motif et Aqua Look-et-Sent:
Mais pas Nimbus:
Y at-il une méthode utilitaire quelque part Cela donnera de manière fiable X, Y offsets pour le texte dans tous Look-and-Feels?
code
(note: pour éviter les effets secondaires mise en page j'ai utilisé une disposition nulle pour ce test):
import java.awt.Insets;
import javax.swing.JApplet;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.border.Border;
public class AlignCheckBoxText extends JApplet {
public AlignCheckBoxText() {
setLayout(null);
checkBox = new JCheckBox("Hello, World!");
label = new JLabel("Hello, World!");
add(checkBox);
add(label);
}
@Override
protected void validateTree() {
checkBox.setLocation(0, 0);
checkBox.setSize(checkBox.getPreferredSize());
int labelX = UIManager.getIcon("CheckBox.icon").getIconWidth();
Insets cbInsets = UIManager.getInsets("CheckBox.margin");
if (cbInsets != null) labelX += cbInsets.left + cbInsets.right;
Border cbBorder = UIManager.getBorder("CheckBox.border");
if (cbBorder != null) {
Insets borderInsets = cbBorder.getBorderInsets(checkBox);
if (borderInsets != null) {
labelX += borderInsets.left;
}
}
label.setLocation(labelX, checkBox.getHeight());
label.setSize(label.getPreferredSize());
super.validateTree();
}
private JCheckBox checkBox;
private JLabel label;
}
Dans ce cas, il serait plus simple de créer une case à cocher sans texte, et un JLabel séparé qui contient le texte de la case d'origine. – barjak
@barjak, cela va jouer avec l'affichage de la mise au point. Normalement, il y a une bordure autour de la case à cocher (icône et texte) pour montrer quand elle est focalisée. Si vous cliquez également sur le texte, la sélection de la case ne sera plus activée. – finnw