2011-01-05 4 views
2

Я делаю клиент Twitter (настольное приложение) на Java, я также использую API twitter4j. мне удалось выполнить поиск твитов, и я возвращаю результаты, и я показываю их в Jlist. Что я хочу, так это то, что я хочу показать твиты красиво в списке, а не только как текст .. показать изображение пользователя, твит, твитнуть ... и т. Д. Всю эту информацию .. Кроме того, добавьте дополнительные данные, такие как звездный рейтинг .. как я могу добавить это в JList? может ли Jlist содержать разные объекты. Например, Jpanels.JLists с набором объектов

ответ

2

Вместо этого я предлагаю вам поставить набор JPanel, внутри JScrollPane ,

+0

привет, я пытался это сделать .. он добавляет jpanel тот, который я разработал .., но если бы я попытался добавьте еще, что он не возьмет его .. может у знать почему? i do .. jScrollPane2.getViewport(). add (новый JPanel()); – AhmadAssaf

+0

Добавьте панель JScrollPane. Затем добавьте все панели к этой панели. – jzd

+0

спасибо .. сильно работает .. спасибо – AhmadAssaf

1

Средство визуализации JList должно быть JComponent, поэтому вы можете использовать любой объект Swing, включая JPanels.

Вы также можете использовать HTML в JLabel, если это проще сделать, чем использовать JPanel.

Чтобы использовать пользовательский визуализатор, вы делаете что-то вроде этого ..

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

+0

элементы теперь недоступны в списке, я могу выбрать любой .. могу ли я получить некоторую информацию об этом, пожалуйста, – AhmadAssaf

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); 
} 

Это 33 строк кода, чтобы сделать JTable и сделать его автоматически обновляться, чтобы отобразить 4 поля каждой EmailTarget в EventList<EmailTarget> ,

Для содержимого нетекстового поля вам просто нужен пользовательский TableCellRenderer.

0

AS Джейсон предложил лучше пойти на jtable вместо JLIst. На самом деле вы можете использовать любые классы Java, основанные на таблицах, которые имеют расширенную функциональность над JTables. JIDE - одна из таких библиотек, но ее коммерческая. вы можете найти и найти много.

Смежные вопросы