gpt4 book ai didi

java - JList 使用自定义 ListCellRenderer 获取错误的尺寸

转载 作者:行者123 更新时间:2023-11-30 06:21:40 24 4
gpt4 key购买 nike

我有一个 JList<MyObj> ,为此我创建了自定义 ListCellRenderer<MyObj> .此列表包含在 JScrollPane 中.

为避免在运行时 调整框架大小,我希望滚动 Pane 始终具有适合显示的大小 VISIBLE_ITEMS在我的元素中,列表开始时是空的还是填充的。以下是列表的设置代码。

model   = new DefaultListModel<>();
list = new JList<>(model);

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
list.setVisibleRowCount(VISIBLE_ITEMS);
list.setCellRenderer(new MyItem());
/* ... */
JScrollPane scroll = new JScrollPane(list);
panel.add(scroll, BorderLayout.CENTER);

MyItem定义如下。

/**
* A component that displays a single item.
*/
private static final class MyItem extends JPanel
implements ListCellRenderer<MyObj> {
// ...

private final JLabel label;
private final JTextArea text;

MyItem() {
super(new BorderLayout());
label = new JLabel(PLACEHOLDER);
text = new JTextArea(PLACEHOLDER, 3, CHARS_PER_ROW);

label.setHorizontalAlignment(SwingConstants.LEADING);
text.setEditable(false);
text.setLineWrap(true);
text.setWrapStyleWord(true);
text.setMargin(new Insets(5, 10, 5, 5));

super.add(text, BorderLayout.CENTER);
super.add(label, BorderLayout.PAGE_START);
}

@Override
public Component getListCellRendererComponent
(JList<? extends MyObj> list, MyObj value, int index,
boolean isSelected, boolean cellHasFocus) {
setLabel(value.getArg1());
text.setText(value.getArg2());
return this;
}

private void setLabel(String arg) {
label.setText(new StringBuilder(35 + arg.length())
.append("<html><b><u>").append(arg)
.append("</u></b></html>").toString());
}
}

当列表开始为空时,它的首选大小似乎足够 VISIBLE_ITEMS行的常规字符串。但是,如果我硬编码一些 MyObj初始化列表,它具有正确的维度。

这是我的单元格渲染器的问题,还是 JList 的预期行为? , 一般来说?

最佳答案

我认为您想调用 JList 的 setPrototypeCellValue(...) 方法以允许 JList 设置其固定的单元格宽度和高度。请看一下 JList API有关这方面的更多详细信息以及示例。

关于java - JList 使用自定义 ListCellRenderer 获取错误的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156288/

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