Java jList包含一组对象

Java jList包含一组对象,java,swing,jlist,Java,Swing,Jlist,我正在用Java制作一个twitter客户端(桌面应用程序),我也在使用twitter4j API。我已经成功地搜索了推文,我得到了结果,并将其显示在一个列表中。 我想要的是,我想在列表中很好地显示推文,而不仅仅是文本。。显示用户的图像,推文,推文由。。。等等所有这些信息。。此外,请附上其他数据,如星级。。如何将其添加到JList?Jlist能否容纳不同的对象。。例如Jpanels JList的渲染器必须是JComponent,因此您可以使用任何Swing对象,包括JPanel 如果在JLabe

我正在用Java制作一个twitter客户端(桌面应用程序),我也在使用twitter4j API。我已经成功地搜索了推文,我得到了结果,并将其显示在一个列表中。
我想要的是,我想在列表中很好地显示推文,而不仅仅是文本。。显示用户的图像,推文,推文由。。。等等所有这些信息。。此外,请附上其他数据,如星级。。如何将其添加到JList?Jlist能否容纳不同的对象。。例如Jpanels

JList的渲染器必须是JComponent,因此您可以使用任何Swing对象,包括JPanel

如果在JLabel中使用HTML比在JPanel中使用HTML更容易,那么也可以在JLabel中使用HTML

要使用自定义渲染器,请执行以下操作

myList.setCellRenderer(new CustomRenderer());
然后创建一个这样的渲染器

public class CustomRenderer extends DefaultListCellRenderer {

  public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus) {
    JPanel panel = new JPanel();
    // set up the panel for your exact display requirements.
    return(panel);
  }
}

相反,我建议您将一组JPanel放在JScrollPane中。

建议使用具有多个列的,而不是JList

还建议使用s,这使得在JTable中显示带有字段的列表非常容易,以便在基础列表更改时自动更新

下面是我最近编写的一些代码的示例,其中显示了类似的内容:

private void bindEmailTargetTable(NotificationModel newModel) {
    JTable table = getUI(UIKey.EMAIL_TARGET_TABLE);
    EventList<EmailTarget> displayList = newModel.getEmailTargets();
    TableFormat<EmailTarget> tf = new TableFormat<EmailTarget>()
    {
        @Override public int getColumnCount() {
            return 4;
        }

        private final String[] columns = { "address", "description", "msg left", "msg limit" };
        @Override public String getColumnName(int col) {
            return this.columns[col];
        }

        @Override public Object getColumnValue(EmailTarget item, int col) {
            switch (col)
            {
                case 0:
                    return item.getAddress();
                case 1:
                    return item.getDescription();
                case 2:
                    return item.getRemainingMessages();
                case 3:
                    return item.getMessageLimit();
                default:
                    return "";
            }
        }

    };
    EventTableModel<EmailTarget> etm = new EventTableModel<EmailTarget>(displayList, tf);
    table.setModel(etm);
}   
private void bindEmailTargetTable(NotificationModel newModel){
JTable table=getUI(UIKey.EMAIL\u TARGET\u table);
EventList displayList=newModel.getEmailTargets();
TableFormat tf=新的TableFormat()
{
@重写公共int getColumnCount(){
返回4;
}
私有最终字符串[]列={“地址”、“说明”、“消息左侧”、“消息限制”};
@重写公共字符串getColumnName(int col){
返回此。列[col];
}
@重写公共对象getColumnValue(EmailTarget项,int col){
开关(col)
{
案例0:
return item.getAddress();
案例1:
return item.getDescription();
案例2:
return item.getRemainingMessages();
案例3:
return item.getMessageLimit();
违约:
返回“”;
}
}
};
EventTableModel etm=新的EventTableModel(显示列表,tf);
表2.setModel(etm);
}   
这是33行代码,用于获取
JTable
,并使其自动更新,以在
事件列表中显示每个
EmailTarget
的4个字段


对于非文本字段内容,您只需要一个自定义TableCellRenderer。

正如Jason所建议的,最好使用jtable而不是JLIst。事实上,您可以使用任何免费的基于Java的表类,这些表类在JTables上具有扩展功能。吉德是这样一个图书馆,但它的商业。你可以搜索并找到很多

谢谢你,我已经设法做到了。。但现在,当我添加Jpanel时,如果它有按钮或任何其他组件,则无法访问它们。。它们仅显示元素现在在列表中不可访问,我可以选择任何。。能告诉我一些关于那件事的信息吗你好,我已经试过了。。它添加了一个我设计的jpanel。。但如果我再加一点,那就不行了。。你知道为什么吗?我愿意。。jScrollPane2.getViewport().add(新的JPanel());向JScrollPane添加一个面板。然后将所有面板添加到该面板。