的文本的JLabel是否有外觀和感覺無關對準組件的方式(例如JLabel
)水平與JCheckBox
的文本?對準一個JCheckBox的
我正在嘗試使用UIDefaults
中的值來預測文本相對於JCheckBox
左上角的位置。我發現了一個的組合,讓正確的結果對於金屬的Windows,Motif和水族的外觀和感覺:
但不是在雨雲:
是有一個實用的方法某處那將可靠地爲所有外觀的文本提供X,Y偏移量?
代碼(注意:爲了避免任何佈局副作用我本次測試使用空佈局):
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;
}
在這種情況下,創建一個沒有文本的複選框以及包含原始複選框文本的單獨JLabel會更簡單。 – barjak 2010-09-18 14:15:23
@barjak,這將與焦點顯示混亂。通常在複選框(圖標和文本)周圍有一個邊框,以顯示它的焦點時間。同時點擊文本將不再切換複選框選擇。 – finnw 2010-09-18 14:28:35