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