Có cách nhìn độc lập để sắp xếp thành phần (ví dụ: JLabel
) theo chiều ngang với văn bản của một JCheckBox
không?Căn chỉnh JLabel bằng văn bản của JCheckBox
Tôi đang cố gắng sử dụng các giá trị từ UIDefaults
để dự đoán vị trí của văn bản có liên quan đến góc trên cùng bên trái của JCheckBox
. Tôi đã tìm thấy một sự kết hợp mang lại cho kết quả phù hợp với các kim loại, Windows, Motif và Aqua Look-and-Cảm thấy:
Nhưng không phải trong Nimbus:
Có một phương pháp hữu ích ở đâu đó điều đó sẽ cung cấp độ lệch X, Y đáng tin cậy cho văn bản trong tất cả các Giao diện?
Mã (lưu ý: để tránh bất kỳ bố trí tác dụng phụ tôi đã sử dụng một cách bố trí null cho thử nghiệm nà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;
}
Trong trường hợp này, sẽ dễ dàng hơn khi tạo hộp kiểm không có văn bản và nhãn JL riêng biệt chứa văn bản hộp kiểm gốc. – barjak
@barjak, điều đó sẽ gây rối với màn hình lấy nét. Thông thường có một đường viền xung quanh hộp kiểm (biểu tượng và văn bản) để hiển thị khi nó được lấy nét. Ngoài ra, nhấp vào văn bản sẽ không còn chuyển đổi lựa chọn hộp kiểm nữa. – finnw