具有一组对象的JLists

时间:2011-01-05 15:52:00

标签: java swing jlist

我正在用Java创建一个twitter客户端(桌面应用程序),我也在使用twitter4j API。我设法搜索推文,我得到了结果,我在一个Jlist中显示它们。 我想要的是,我希望在列表中很好地显示推文,不仅仅是作为文本..显示用户的图像,推文,推文等...所有这些信息..另外附加像星的附加数据评级..如何将其添加到JList? Jlist可以保存不同的对象吗...例如Jpanels ..

4 个答案:

答案 0 :(得分:2)

相反,我建议你在JScrollPane中添加一组JPanel。

答案 1 :(得分:1)

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

如果比使用JPanel更容易,也可以在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);
  }
}

答案 2 :(得分:0)

建议使用JTable,它有几列,而不是JList。

还建议使用GlazedList,这样可以很容易地显示包含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);
}   

获取JTable的33行代码并使其自动更新,以显示EmailTarget中每个EventList<EmailTarget>的4个字段。

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

答案 3 :(得分:0)

AS Jason建议最好选择jtable而不是JLIst。实际上,您可以使用任何基于Java的表类,这些表类具有超过JTable的扩展功能。 JIDE是一个这样的图书馆,但它的商业广告。你可以搜索并找到很多..