gpt4 book ai didi

java - 自定义 ListCellRenderer 的 JList 显示错误

转载 作者:搜寻专家 更新时间:2023-11-01 03:57:05 26 4
gpt4 key购买 nike

我在使用 JList 上的自定义 ListCellRenderer 时遇到问题。当 List 中只有 1 个项目时,单元格显示正确,但当项目超过 1 个时,每个单元格接缝被绘制,所有单元格的内容相互重叠,如下所示:

enter image description here

我的 CellRenderer 看起来像这样:

public class SendungsCellRenderer extends JPanel implements ListCellRenderer {

private EmptyBorder eb = new EmptyBorder(5, 2, 5, 2);
private LineBorder lb = new LineBorder(new Color(255,255,255), 5);

@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {

uiSendungsbutton p = (uiSendungsbutton) value;
if(isSelected){
this.setBackground(new Color(200,200,250));
this.setBorder(new CompoundBorder(lb, new StrokeBorder(new BasicStroke())));
}else{
this.setBackground(new Color(252,252,252));
this.setBorder(lb);
}
this.setLayout(p.getLayout());
this.add(p.getNamePnl(),BorderLayout.NORTH);
this.add(p.getKdnrPnl(), BorderLayout.CENTER);
return this;
}

}

它是用

设置的
list_Sendung = new JList(getSendungen().toArray());
list_Sendung.setVisibleRowCount(1);
list_Sendung.setValueIsAdjusting(true);
list_Sendung.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list_Sendung.setCellRenderer(new SendungsCellRenderer());

getSendungen() 方法返回 uiSendungsbutton 的 ArrayList。

如何让 JList 正确地在它自己的单元格中显示每个项目?

最佳答案

问题是所有单元格都使用相同的单元格渲染器,并且对于每个新单元格,您再次将组件添加到 this。要解决此问题,请使用 removeAll 每次从 this 中删除所有组件。修复后您的代码将如下所示:

public class SendungsCellRenderer extends JPanel implements ListCellRenderer {

private EmptyBorder eb = new EmptyBorder(5, 2, 5, 2);
private LineBorder lb = new LineBorder(new Color(255,255,255), 5);

@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
this.removeAll();
uiSendungsbutton p = (uiSendungsbutton) value;
if(isSelected){
this.setBackground(new Color(200,200,250));
this.setBorder(new CompoundBorder(lb, new StrokeBorder(new BasicStroke())));
}else{
this.setBackground(new Color(252,252,252));
this.setBorder(lb);
}
this.setLayout(p.getLayout());
this.add(p.getNamePnl(),BorderLayout.NORTH);
this.add(p.getKdnrPnl(), BorderLayout.CENTER);
return this;
}
}

关于java - 自定义 ListCellRenderer 的 JList 显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18073209/

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