File dir = new File("/users/blah/dirname");
File[] files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".txt");
}
});
for (int s = 0; s < file.length; s++)
{
File userHome = new File(file[s]);
File[] files2 = userHome.listFiles();
list[s] = new JList(files2);
list[s].setFixedCellHeight(App.wert_hoeheDerZelleInDemDerLinkSteht); // Höhe der Zelle
list[s].setCellRenderer(new FileListCellRenderer());
list[s].setBounds(startPunpt_x, 30, breite, framehoehe - 119);
scrollPane[s].setViewportView(list[s]);
}
File[] files = dir.listFiles();
JList<File> list = new JList<File>(files);
list.setCellRenderer(new ListCellRenderer<File>() {
private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
@Override
public Component getListCellRendererComponent(JList<? extends File> list, File value, int index, boolean isSelected, boolean cellHasFocus)
{
JLabel label = (JLabel)defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
String fileName = value.getName();
String fileNameNoExt = fileName.substring(0, fileName.lastIndexOf("."));
label.setText(fileNameNoExt);
return label;
}
});
Hier liegt offenbar ein grundsätzliches Verständnisproblem vor. Im ListCellRenderer wird gar nix "befüllt" oder sonstwie am übergebenen Objekt geändert. Der ListCellRenderer bekommt ein Object (welches auch ein Object[] sein kann), pickt sich die Informationen raus, die er braucht, und verwendet diese, um eine wie auch immer geartete java.awt.Component zu erzeugen oder abzuändern.Ich [...] möchte das "Object elements[][]" mit meinen Daten füllen, das bekomme ich Irgendwie nicht in den Griff.
for (int s = 0; s < file.length; s++)
{
File userHome = new File(file[s]);
File[] files2 = userHome.listFiles();
Object[][] elements = new Object[files2.length][4];
for (int k = 0; k < files2.length; k++)
{
elements[k][0] = new Font("Helvetica", Font.PLAIN, 15);
elements[k][1] = Color.BLACK;
Icon ico = FileSystemView.getFileSystemView().getSystemIcon(files2[k]);
elements[k][2] = ico;
String[] endungEntf = files2[k].getName().split(Pattern.quote( "." ));
elements[k][3] = endungEntf[0];
}
list[s] = new JList(files2);
list[s].setFixedCellHeight(App.wert_hoeheDerZelleInDemDerLinkSteht); // Höhe der Zelle
list[s].setCellRenderer(new FileListCellRenderer());
list[s].setBounds(startPunpt_x, 30, breite, framehoehe - 119);
scrollPane[s].setViewportView(list[s]);
}
package main;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
class MeinListCellRenderer implements ListCellRenderer {
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
Font theFont = null;
Color theForeground = null;
Icon theIcon = null;
String theText = null;
JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);
if (value instanceof Object[]) {
Object values[] = (Object[]) value;
theFont = (Font) values[0];
theForeground = (Color) values[1];
theIcon = (Icon) values[2];
theText = (String) values[3];
} else {
theFont = list.getFont();
theForeground = list.getForeground();
theText = "";
}
if (!isSelected) {
renderer.setForeground(theForeground);
}
if (theIcon != null) {
renderer.setIcon(theIcon);
}
renderer.setText(theText);
renderer.setFont(theFont);
return renderer;
}
}
//public class ComplexRenderingSample {
// public static void main(String args[]) {
// Object elements[][] = {
// { new Font("Helvetica", Font.PLAIN, 20), Color.RED, new MyIcon(), "A" },
// { new Font("TimesRoman", Font.BOLD, 14), Color.BLUE, new MyIcon(), "A" },
// { new Font("Courier", Font.ITALIC, 18), Color.GREEN, new MyIcon(), "A" },
// { new Font("Helvetica", Font.BOLD | Font.ITALIC, 12), Color.GRAY, new MyIcon(), "A" },
// { new Font("TimesRoman", Font.PLAIN, 32), Color.PINK, new MyIcon(), "A" },
// { new Font("Courier", Font.BOLD, 16), Color.YELLOW, new MyIcon(), "A" },
// { new Font("Helvetica", Font.ITALIC, 8), Color.DARK_GRAY, new MyIcon(), "A" } };
// JFrame frame = new JFrame("Complex Renderer");
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// JList jlist = new JList(elements);
// ListCellRenderer renderer = new MeinListCellRenderer();
// jlist.setCellRenderer(renderer);
// JScrollPane scrollPane = new JScrollPane(jlist);
// frame.add(scrollPane, BorderLayout.CENTER);
// frame.setSize(300, 200);
// frame.setVisible(true);
// }
//}
class MyIcon implements Icon {
public MyIcon() {
}
public int getIconHeight() {
return 20;
}
public int getIconWidth() {
return 20;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor(Color.RED);
g.drawRect(0, 0, 25, 25);
}
}
Naja, was ich geschrieben habe, war ja auchIch verstehe nicht, wieso er ungeeignet sein soll, ich habe es jetzt in dem Moment so hinbekommen, wie ich es mir vorgestellt hatte.
Die Objekte, die du jetzt anzeigen lässt, sind keine File-Objekte mehr, sondern Instanzen von Object[].Wenn deine anzuzeigenden Objekte Instanzen von java.io.File ist, ist der von dir verwendete Renderer ungeeignet.
JList<File> list = new JList<File>(files2);
list.setCellRenderer(new ListCellRenderer<File>() {
private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
@Override
public Component getListCellRendererComponent(JList<? extends File> list, File value, int index, boolean isSelected, boolean cellHasFocus)
{
JLabel label = (JLabel)defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if(value!=null)
{
Icon icon= FileSystemView.getFileSystemView().getSystemIcon(value);
img = ((ImageIcon)icon).getImage();
String fileName = value.getName();
String fileNameNoExt = fileName.substring(0, fileName.lastIndexOf("."));
label.setIcon(new CircleIcon());
label.setText(fileNameNoExt);
label.setFont(new Font("Tahoma", Font.PLAIN, 15));
if (isSelected)
{
label.setEnabled(true);
label.setBackground( new Color(200,210,220) );
label.setForeground(Color.black);
}
else
{
label.setBackground(Color.white);
label.setForeground(Color.black);
label.setBorder(null);
}
if (cellHasFocus)
{
label.setBorder( new LineBorder(Color.blue));
}
else
{
label.setBorder(new EmptyBorder(10, 1, 10, 1) );
}
}
return label ;
}
});
class CircleIcon implements Icon
{
public void paintIcon( Component c, Graphics g, int x, int y )
{
Image scaledImage = Frame.img.getScaledInstance(getIconWidth(), getIconHeight(),Image.SCALE_SMOOTH);
g.drawImage(scaledImage, 2, 10, Color.WHITE, null);
}
public int getIconWidth()
{
return 20;
}
public int getIconHeight()
{
return 20;
}
}