Ich mache einen Twitter-Client (Desktop-Anwendung) in Java, ich benutze auch twitter4j API. Ich habe geschafft, die Suche nach Tweets zu machen, und ich bekomme Ergebnisse zurück und ich zeige sie in einer Jlist. was ich will ist, dass ich Tweets schön in der Liste anzeigen möchte, nicht nur als Text .. Zeige das Bild des Benutzers, der Tweet, getwittert von ... usw. all diese Informationen .. zusätzlich zusätzliche Daten anhängen Sterne-Bewertung .. Wie kann ich das zu einer JList hinzufügen? Kann die Jlist verschiedene Objekte enthalten .. Jpanels zum Beispiel ..JLists mit einer Reihe von Objekten
Antwort
erstellen Ich schlage vor, Sie setzen eine Reihe von JPanels in einem JScrollPane .
Ein Renderer einer JList muss eine JComponent sein, also können Sie jedes Swing-Objekt verwenden, einschließlich JPanels.
Sie können auch HTML in einem JLabel verwenden, wenn dies einfacher ist als die Verwendung eines JPanels.
Um einen benutzerdefinierten Renderer verwenden, können Sie etwas tun ..
myList.setCellRenderer(new CustomRenderer());
und dann ein Renderer wie diese Statt
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);
}
}
danke ich habe es geschafft, das zu tun .. aber jetzt, wenn ich das Jpanel hinzufügen, wenn es Tasten oder andere Komponenten hat sie nicht zugegriffen werden .. sie werden nur angezeigt – AhmadAssaf
der Elemente sind jetzt in der Liste nicht zugänglich, ich kann jedes auswählen .. kann ich einige Informationen darüber haben bitte – AhmadAssaf
Vorschlagen mit JTable, die mehrere Spalten anstelle einer JList hat.
Verwenden Sie auch GlazedList s, wodurch es sehr einfach ist, Listen mit Feldern in einer JTable anzuzeigen, sodass sie automatisch aktualisiert werden, wenn sich die zugrunde liegende Liste ändert.
Hier ist ein Beispiel für einige Code, den ich vor kurzem, die etwas Ähnliches zeigt schrieb:
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);
}
, dass 33 Zeilen Code ist eine JTable
zu nehmen und machen es aktualisieren sich automatisch 4 Felder jedes EmailTarget
in ein EventList<EmailTarget>
anzuzeigen .
Für Inhalte außerhalb des Textfelds benötigen Sie nur einen benutzerdefinierten TableCellRenderer.
AS Jason vorgeschlagen, es ist besser, für jtable statt JLIst gehen. Tatsächlich können Sie beliebige freie Java-basierte Tabellenklassen verwenden, die erweiterte Funktionalität gegenüber JTables haben. JIDE ist eine solche Bibliothek, aber ihre kommerzielle. Sie können suchen und viel finden.
Hallo, ich habe versucht, das zu tun .. es fügt ein jpanel das, das ich entworfen habe .. aber wenn ich es versuchte fügen Sie mehr hinzu es wird nicht dauern .. können Sie warum wissen? ich mache .. jScrollPane2.getViewport(). add (new JPanel()); – AhmadAssaf
Fügen Sie dem JScrollPane einen Bereich hinzu. Fügen Sie dann alle Ihre Panels zu diesem einen Panel hinzu. – jzd
danke .. es funktioniert sehr gut .. danke – AhmadAssaf