【发布时间】:2013-08-06 06:37:04
【问题描述】:
我在使用 JList 上的自定义 ListCellRenderer 时遇到问题。当 List 中只有 1 项时,单元格会正确显示,但是当有 1 项以上时,每个单元格会被绘制成所有单元格的内容相互重叠,如下所示:
我的 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 在自己的单元格中正确显示每个项目?
【问题讨论】:
-
不要在 JList 中存储组件,而是存储应该呈现的数据
-
@kleopatra:这是有道理的。谢谢。
-
看看这里:stackoverflow.com/questions/6042955/… 我遇到了类似的问题。这可能会有所帮助。
-
@LuigiEdlCarno 不是,错误的决定,忘记了,不要设置,添加,删除,更改
JComponent及其在XxxRenderer中的状态/属性,请参阅code how can/could be this idea works,使用JTable(一列没有 JTableHeader)而不是 JList
标签: java swing listcellrenderer