2011-01-05 76 views
2

我正在用Java編寫twitter客戶端(桌面應用程序),我也使用twitter4j API。我已經設法搜索推文,並獲得結果,並將它們顯示在Jlist中。 我想要的是,我想在列表中很好地顯示推文,不僅僅作爲文本..顯示用戶的圖像,推文,推文...等所有這些信息..此外附加額外的數據星級評分..我怎麼可以添加到一個JList? Jlist可以包含不同的對象..例如Jpanels ..有一組對象的JLists

回答

2

渲染相反,我建議你把一組JPanels的一個JScrollPane內。

+0

你好,我試圖做到..它增加了我設計的一個jpanel ..但如果我試圖添加更多它不會採取它..你能知道爲什麼嗎?我做.. jScrollPane2.getViewport()。add(new JPanel()); – AhmadAssaf 2011-01-06 09:33:17

+0

將面板添加到JScrollPane。然後將所有面板添加到該面板。 – jzd 2011-01-06 12:17:43

+0

謝謝..它工作得很好..謝謝 – AhmadAssaf 2011-01-06 15:05:52

1

JList的呈現器必須是JComponent,因此您可以使用任何Swing對象,包括JPanel。

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

謝謝你,我設法做到了..但現在當我添加Jpanel,如果它有按鈕或任何其他組件,他們不能被訪問..他們只顯示 – AhmadAssaf 2011-01-06 09:03:37

+0

元素現在不能在列表中訪問,我可以選擇任何..我可以有一些信息,請 – AhmadAssaf 2011-01-06 15:07:05

0

建議使用JTable,它有幾列,而不是JList。

還建議使用GlazedList 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); 
} 

這33行代碼採取JTable,使其自動更新在EventList<EmailTarget>顯示每個EmailTarget的4場。

對於非文本字段內容,您只需要一個自定義TableCellRenderer。

0

因爲Jason建議最好去jtable而不是JLIst。事實上,您可以使用任何基於JTable的免費Java基礎表類,它們具有擴展功能。 JIDE是一個這樣的圖書館,但它的商業。你可以搜索和找到很多..

相關問題