Czy istnieje look-and-feel-niezależny sposób, aby wyrównać komponent (np JLabel
) poziomo z tekstem z JCheckBox
?Wyrównaj do JLabel z tekstem o JCheckBox
Próbuję użyć wartości z UIDefaults
, aby przewidzieć położenie tekstu względem lewego górnego rogu JCheckBox
. Znalazłem kombinację, która daje prawo wynik na metal, Windows, Motif i wygląd aqua-i-Temp:
Ale nie w Nimbus:
Czy istnieje metoda narzędzie gdzieś który w niezawodny sposób zapewni przesunięcia X, Y dla tekstu we wszystkich Look-and-Feels?
Code (uwaga: aby uniknąć układu uboczne użyłem null układ dla tego testu):
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;
}
W tym przypadku byłoby prostsze, aby utworzyć pole bez tekstu, a oddzielny JLabel, który zawiera tekst oryginalnego pole wyboru jest. – barjak
@barjak, który będzie bałagan z wyświetlaniem ostrości. Zwykle wokół pola wyboru znajduje się obramowanie (ikona i tekst), aby pokazać, kiedy jest ono skupione. Kliknięcie tekstu nie będzie już przełączać wyboru pola wyboru. – finnw