¿Hay un look-and-feel-independiente manera de alinear un componente (por ejemplo, un JLabel
) horizontalmente con el texto de un JCheckBox
?alinear un JLabel con el texto de una JCheckBox
Estoy tratando de usar valores del UIDefaults
para predecir la ubicación del texto relativo a la esquina superior izquierda de JCheckBox
. He encontrado una combinación que da el resultado correcto para el metal, Windows, Motif y Aqua Mira-y-siente:
Pero no en Nimbus:
¿Existe un método de utilidad alguna parte ¿Eso le dará confiablemente compensaciones X, Y para el texto en todos los Look-and-Feels?
Código (nota: para evitar cualquier diseño de efectos secundarios que utiliza un diseño nulo para esta prueba):
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;
}
En este caso, sería más simple crear una casilla de verificación sin texto, y una JLabel separada que contiene el texto de la casilla de verificación original. – barjak
@barjak, que interferirá con la visualización del enfoque. Normalmente, hay un borde alrededor de la casilla de verificación (icono y texto) para mostrar cuándo está enfocado. Al hacer clic en el texto, ya no se activará la selección de la casilla de verificación. – finnw