ImageIcons in JList darstellen

Skalar

Grünschnabel
Hallo,
ich versuche schon seit einigen Tagen ImageIcons in einer JList darzustellen.
Ich möchte die darzustellenden Bilder aus einem Vektor auslesen und dann jede einzelne Komponente des Vectors als einen Listeneintrag darstellen (nur das Bild, ganz ohne Text).

Alles was ich bisher geschafft habe, war die Namen der ImageIcons in die Liste schreiben zu lassen, nicht aber die Bilder selbst. :(
(Ich muss nur leider zugeben, dass selbst das z.Zt nicht mehr geht, da ich zu viel probiert habe ;) )

Es wäre also toll, wenn mir jemand erklären könnte wie ich die ImageIcons in die JList bekomme und zwar so, dass ich sie auch wirklich bewundern kann :)

Ach noch eins, ich weiss nicht, ob das möglich ist, aber würde die Bilder gerne zentriert in der Listen-Komponente haben, geht das ? Oder ist alles in der Liste linksbündig?

Ich danke euch schon mal im Voraus für eure Hilfe.
Gruss, Skalar.
 
Original geschrieben von Skalar
Hallo,
ich versuche schon seit einigen Tagen ImageIcons in einer JList darzustellen.
Ich möchte die darzustellenden Bilder aus einem Vektor auslesen und dann jede einzelne Komponente des Vectors als einen Listeneintrag darstellen (nur das Bild, ganz ohne Text).

Alles was ich bisher geschafft habe, war die Namen der ImageIcons in die Liste schreiben zu lassen, nicht aber die Bilder selbst. :(
(Ich muss nur leider zugeben, dass selbst das z.Zt nicht mehr geht, da ich zu viel probiert habe ;) )

Es wäre also toll, wenn mir jemand erklären könnte wie ich die ImageIcons in die JList bekomme und zwar so, dass ich sie auch wirklich bewundern kann :)

Ach noch eins, ich weiss nicht, ob das möglich ist, aber würde die Bilder gerne zentriert in der Listen-Komponente haben, geht das ? Oder ist alles in der Liste linksbündig?

Ich danke euch schon mal im Voraus für eure Hilfe.
Gruss, Skalar.

Codeschnipsel, was Du erfolglos versucht hast, wären hilfreich.
Im Sun Tutorial sehe ich:

Code:
listModel = new DefaultListModel();
listModel.addElement("Alison Huml");
listModel.addElement("Kathy Walrath");
listModel.addElement("Lisa Friendly");
listModel.addElement("Mary Campione");

list = new JList(listModel);

addElement() erwartet ein Object. Ich würde also

listModel.addElement(myImageIcon);

ausprobieren.
 
Images sind jetzt da, aber nicht zentriert

Hallo,

@ Snape:
Dankeschön für die schnelle Antwort (und den Hinweis mit dem Quelltext :) ).
Ich hab es ausprobiert und kann nun tatsächlich meine Bilder in der JList bewundern. Hab nun noch mit einem CellRenderer rumprobiert. Der zeigt mir jetzt auch die Bilder an (s.u.)


Es wäre jetzt noch toll, wenn man die Images zentriert in der Liste hätte.
Ich habe bereits folgendes versucht, jedoch ohne Erfolg.
Vielleicht hat ja jemand von euch noch einen zündenden Gedanken.

Also, hier zunächst das Erzeugen der JList (genannt pixList) im Hauptprogramm:

pixList = new JList(pixVector); // pixVector enthält die ImageIcons

pixList.setCellRenderer(new MyListCellRenderer());
pixList.setFixedCellHeight(150);
pixList.setFixedCellWidth(180);

================================
Dann noch die Klasse MyListCellRenderer:

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.io.*;
import java.beans.*;
import java.util.*;
/**
*
* @author Skalar
*/
public class MyListCellRenderer extends JLabel implements ListCellRenderer {

// This is the only method defined by ListCellRenderer.
// We just reconfigure the JLabel each time we're called.


public Component getListCellRendererComponent(
JList list,
Object value, // value to display
int index, // cell index
boolean isSelected, // is the cell selected
boolean cellHasFocus) // the list and the cell have the focus
{
// String s = value.toString();
setIcon((ImageIcon)value);
setHorizontalAlignment((int) CENTER_ALIGNMENT);
setVerticalAlignment((int) CENTER_ALIGNMENT);
setPreferredSize(new Dimension(140,170));
setMinimumSize(new Dimension(140,170));

if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
}
else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
return this;
}
}

=====================

Ich habe bereits die Methoden "setHorizontalAlignment" und "setVerticalAlignment" verwendet, aber die Bilder werden immernoch linksbündig dargestellt. (Das Label besteht nur aus dem ImageIcon)

Ich bin für alle Hinweise offen.
Dank im voraus.
Skalar.
 
Re: Images sind jetzt da, aber nicht zentriert

Original geschrieben von Skalar
Hallo,

Es wäre jetzt noch toll, wenn man die Images zentriert in der Liste hätte.
Ich habe bereits folgendes versucht, jedoch ohne Erfolg.
Vielleicht hat ja jemand von euch noch einen zündenden Gedanken.

Ich habe bereits die Methoden "setHorizontalAlignment" und "setVerticalAlignment" verwendet, aber die Bilder werden immernoch linksbündig dargestellt. (Das Label besteht nur aus dem ImageIcon)

Ich bin für alle Hinweise offen.
Dank im voraus.
Skalar.

Hm. Also die Ausrichtung kann ja nur über den Renderer laufen. Ich kann mir das zwar nicht so recht vorstellen, aber ersetz mal testweise
Code:
setHorizontalAlignment((int) CENTER_ALIGNMENT);
setVerticalAlignment((int) CENTER_ALIGNMENT);

durch
Code:
setHorizontalAlignment(SwingConstants.CENTER);
setVerticalAlignment(SwingConstants.CENTER);

Die verwenden wir immer AFAIK.
 
Ich habs jetzt !

Hallo zusammen,
nachdem ich mich nun schon seit einigen Tagen mit dem Problem "Images in JList ( zentriert)" herum geärgert habe, kann ich nun stolz verkünden :
Ich habs jetzt !

Leider muss ich zugeben, dass ich einen total dummen Fehler gemacht hab.
Habe vorhin ein "System.out.println" in meinen CellRenderer geschmissen und musst feststellen, dass es gar nicht ausgegeben wurde. :mad:
Das hat mich dann schon stutzig gemacht. Denn schliesslich würde das bedeuten, dass mein schöner CellRenderer gar nicht aufgerufen werden würde.

Lage Rede, kurzer Sinn, ich hatte noch in einem anderen Ordner eine Datei mit gleichem Name zu liegen (aus einem früheren Versuch). Und leider hat er immer diese aufgerufen.
Jetzt wo ich die alte Datei entfernt habe, "schnurrt" meine JList :)

Dank nochmal an alle, die versucht haben mit mir zusammen der Sache auf den Grund zu gehen.

Gruss, Skalar.
 
Zurück