gpt4 book ai didi

java - JList 组件中 JCheckBox 的边距

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:48 24 4
gpt4 key购买 nike

我有一个 JList 组件,每个项目都有 JCheckBox 渲染器。我想给复选框添加边距,这样它就不会粘在左侧。

我试过了

checkBox.setMargin(new Insets(0, 10, 0, 0)); //left side spacing

也尝试过

checkBox.setAlignmentX(10.0F);

渲染代码

class ListRenderer() {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JCheckBox box = new JCheckBox("Married");
return box;
}

}

这两个都不行。

enter image description here

最佳答案

与其尝试使用 setMargin 方法来实现,不如尝试通过向渲染器添加 EmptyBorder 来实现。此外,如果您在 ListCellRenderer 中返回一个 new JCheckBox,您的应用程序将使用大量内存(它不会返回给操作系统),因为每次(几乎)组件事件触发/受到干扰,它正在重新绘制,因此创建了新的 *cells JCheckBoxes。相反,创建一个 extends JCheckBoximplements ListCellRenderer 的新类。此外,检查 setIconTextGap 方法。你可能想使用它:)

一个完整的例子:

public class CheckBoxInJList extends JFrame {
private static final long serialVersionUID = -1662279563193298340L;

public CheckBoxInJList() {
super("test");
setDefaultCloseOperation(EXIT_ON_CLOSE);

DefaultListModel<String> model;
JList<String> list = new JList<>(model = new DefaultListModel<>());
for (int i = 0; i < 1000; i++) {
String s = "String: " + i + ".";
model.addElement(s);
}
list.setCellRenderer(new CheckBoxRenderer());

add(new JScrollPane(list), BorderLayout.CENTER);
setSize(500, 500);
setLocationRelativeTo(null);
}

private static class CheckBoxRenderer extends JCheckBox implements ListCellRenderer<String> {
public CheckBoxRenderer() {
super();
setBorder(BorderFactory.createEmptyBorder(0, 15, 0, 0));
}

@Override
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index,
boolean isSelected, boolean cellHasFocus) {
setText(value);
setSelected(isSelected);
return this;
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new CheckBoxInJList().setVisible(true);
});
}
}

预览:

enter image description here

关于java - JList 组件中 JCheckBox 的边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57698760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com