in listFiles() oder JList Dateiendungen entfernen

Ingerten

Bekanntes Mitglied
Hallo Männers,

ich würde gerne aus listFiles() oder JList die Dateiendung .lnk verschwinden lassen, bevor ich die Dateinamen ausgebe, aber irgendwie will es mir nicht gelingen.

Kennt da jemand einen Supergeheimen ansatz, wie ich das Problem lösen kann? ???:L
 

jgh

Top Contributor
super geheim und nicht weitersagen...

Java:
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");
    }
});

1. Google Treffer, der hier gibt dir nur .txt´s wieder...wie du evtl. alle außer .lnk wiedergeben kannst, überlass ich mal deiner Intelligenz! Sollte das hier einer sagen, muss ich leider ....
 

Ingerten

Bekanntes Mitglied
Ich glaube wir meinen nicht ganz das selbe, denke ich mal.
Ich wollte nicht, das er mir die Dateien mit einem .lnk am Ende nicht ausgibt, sondern ich will ja genau die Dateien, mit dem .lnk am Ende, nur will ich die Endung nicht mit ausgeben lassen

also die Kurzform:

meine ausgabe sieht im moment so aus

link1.lnk
link2.lnk
link3.lnk


ich will aber

link1
link2
link3

also ohne Dateiendung
 

Joose

Top Contributor
Willst du die Dateien nach Dateiendung filtern oder geht es dir darum das die Ausgabe in der JList einfach ohne Dateiendung dasteht?

Fürs filtern hat dir jgh schon eine Lösung gegeben.

Wenn es dir um die Anzeige geht musst du beim Hinzufügen der Dateinamen zur JList einfach die "String.substring(...)" Methode verwenden.

EDIT: Also es geht um die Anzeige, wie fügst du denn die Daten zu deiner JList hinzu?
 
Zuletzt bearbeitet:

Ingerten

Bekanntes Mitglied
Java:
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]);
}
 

Joose

Top Contributor
Das Problem liegt am "FileListCellRenderer".

Diese Klasse wird als CellRenderer der JList gesetzt. Der CellRenderer kann die Anzeige eines Eintrages in der JList "aufpeppen".
Wenn diese Klasse nicht deine eigene ist, wird es dir damit nicht möglich sein die Anzeige zu ändern. Entweder schreibst du deinen eigenen CellRenderer (Beispiel: eigener CellRenderer) oder informierst dich ob du den verwendeten CellRenderer "konfigurierern" kannst.
 

Ingerten

Bekanntes Mitglied
#Joose, besten Dank für deine Hilfe.

Ich glaube, ich werde es mal mit dem "eigenen CellRenderer" versuchen.

Ich muss erstmal was loswerden, mir ist aufgefallen, das du mit einer der aktivsten User bist und Hilfst wo du kannst, dafür möchte ich mich bei dir bedanken, heut zu Tage ist das nicht mehr selbstverständlich.

Wenn du weiter so machst, dann werde ich dich nurnoch persönlich anschreiben. :D ne ist nur spass, keine Angst

LG
 

Ingerten

Bekanntes Mitglied
Hallo Männers,

hab da mal noch ne Frage.

Ich habe jetzt diesen ListCellRenderer
genommen und möchte das "Object elements[][]" mit meinen Daten füllen, das bekomme ich Irgendwie nicht in den Griff.

Ich habe mir gedacht, das ich es mit einer for-schleife lösen kann, aber es klappt nicht.

hat da einer ne Idee?
 

X5-599

Top Contributor
Hab mir deinen Link nicht angesehen. Hab mal dieses Beispiel benutzt:

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

Harry Kane

Top Contributor
Ich [...] möchte das "Object elements[][]" mit meinen Daten füllen, das bekomme ich Irgendwie nicht in den Griff.
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.
Wenn deine anzuzeigenden Objekte Instanzen von java.io.File ist, ist der von dir verwendete Renderer ungeeignet.
 

Ingerten

Bekanntes Mitglied
Ich verstehe nicht, wieso er ungeeignet sein soll, ich habe es jetzt in dem Moment so hinbekommen, wie ich es mir vorgestellt hatte.

Java:
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]);
}

und hier nochmal die Renderer-Klasse
Java:
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);
  }
}
 

Harry Kane

Top Contributor
Ich verstehe nicht, wieso er ungeeignet sein soll, ich habe es jetzt in dem Moment so hinbekommen, wie ich es mir vorgestellt hatte.
Naja, was ich geschrieben habe, war ja auch
Wenn deine anzuzeigenden Objekte Instanzen von java.io.File ist, ist der von dir verwendete Renderer ungeeignet.
Die Objekte, die du jetzt anzeigen lässt, sind keine File-Objekte mehr, sondern Instanzen von Object[].
Du kannst natürlich Objekte vom Typ X in solche vom Typ Y umwandeln und dann einen Renderer verwenden, der mit Objekten des Typs Y umgehen kann, aber mir wäre dieser Umwandlungsschritt zu aufwändig.
Ausserdem nutzt du ein paar Möglichkeiten, die dir MeinListCellRenderer bietet, gar nicht. Alle Einträge haben dieselbe Farbe, denselben Font und dasselbe Icon. Deshalb könntest du diese Eigenschaften auch im Renderer direkt setzen, anstatt sie im Renderer erst aus dem Array auszulesen. Nur der Text unterscheidet sich. Aber das wegschneiden der Dateiendung kann auch im Renderer direkt passieren, wie von X5-599 gezeigt.
Aber jeder so wie er mag. Oder: wieso einfach, wenns auch kompliziert geht.
 

Harry Kane

Top Contributor
Edit: kleine Korrektur. Natürlich haben deine Einträge nicht alle dasselbe Icon, aber das richtige Icon könnte sich ein FileListCellRenderer aus einem übergebenen item der Klasse File auch ohne weiteres besorgen.
Was wir gerade auch noch einfällt: Nehmen wir mal an, du möchtest aus der JList ein Objekt auswählen und damit etwas machen, z. B. bei Directories eine Datei anlegen oder bei Dateien diese mit einem FileInputStream öffnen. Leider enthält deine JList jetzt keine File Objekte mehr, sondern Object[]s, und wenn du mit den Einträgen etwas machen willst (also mehr als sie einfach nur anzeigen zu lassen), müsstest du aus den Object[]s die Files wieder rekonstruieren. Spätestens an dem Punkt wäre das ganze für mich viel zu unelegant und aufwändig.
 

Ingerten

Bekanntes Mitglied
So, da bin ich wieder.

Ich habe die ganze Sache jetzt so gelöst, nach Vorschlag von #X5-599, ich hoffe mal, das es nicht mehr so schlimm wie vorher.

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

und hier noch die klasse für das Icon

Java:
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;
 }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
M Input/Output File.listFiles() gibt null zurück Java Basics - Anfänger-Themen 3
eLogic Dateien auslesen - listFiles Java Basics - Anfänger-Themen 17
A NullPointerException bei listFiles() Java Basics - Anfänger-Themen 3
S listFiles() alphabetisch sortieren Java Basics - Anfänger-Themen 1
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
D JList ListSelectionEvent entfernen? Java Basics - Anfänger-Themen 13
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
S Export aus JList Java Basics - Anfänger-Themen 6
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
M Erste Schritte Auswahl in einer JList Java Basics - Anfänger-Themen 2
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
B JFileChooser und JList Java Basics - Anfänger-Themen 7
OnDemand Enumeration <> JList Java Basics - Anfänger-Themen 5
P Mehrfachauswahl in einer JList Java Basics - Anfänger-Themen 2
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
C .txt und Jlist Java Basics - Anfänger-Themen 10
J Daten in eine JList einfügen Java Basics - Anfänger-Themen 6
A JList / toString modify Java Basics - Anfänger-Themen 2
K jlist an text anpassen Java Basics - Anfänger-Themen 3
D Erste Schritte JList + Checkbox Java Basics - Anfänger-Themen 5
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
A JList bearbeiten Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
H JList Java Basics - Anfänger-Themen 2
G JList Objekte richtig anzeigen in JDK 6 Java Basics - Anfänger-Themen 5
U JList Java Basics - Anfänger-Themen 6
L HashMap zu JList Java Basics - Anfänger-Themen 6
C Input/Output Inhalte von ArrayList und JList in Datei schreiben Java Basics - Anfänger-Themen 5
M Jlist Elemente hinzufügen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M GUI JList - Objekte listen u. Feld anzeigen? Java Basics - Anfänger-Themen 16
E JList GUI aktualisieren? Java Basics - Anfänger-Themen 3
JAVAnnik JList Auswahl Java Basics - Anfänger-Themen 2
Z In JList per Doppelklick eine Datei öffnen (z.B. ein PDF) Java Basics - Anfänger-Themen 16
P Jlist + Popupmenu Java Basics - Anfänger-Themen 10
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
c_sidi90 File Array an Jlist übergeben Java Basics - Anfänger-Themen 11
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
N DefaultListModel auf JList sortieren Java Basics - Anfänger-Themen 7
A JList mit Überschrift Java Basics - Anfänger-Themen 2
K Scrollbalken in JList funktioniert nicht Java Basics - Anfänger-Themen 9
B JList wird nicht aktualisiert bzw hat keine Items Java Basics - Anfänger-Themen 2
D JList nicht sichtbar Java Basics - Anfänger-Themen 4
B JList mit Scrollbar? Java Basics - Anfänger-Themen 7
K Datenbindung an JTable, JList, Primärschlüssel verstecken Java Basics - Anfänger-Themen 4
M JList Event Java Basics - Anfänger-Themen 5
M JList Index selektieren ausschalten. Java Basics - Anfänger-Themen 7
M ArrayList<int[]> - Problem mit JList! Java Basics - Anfänger-Themen 27
M JList + ListModel Java Basics - Anfänger-Themen 26
L JList Aktualisieren funktioniert nur Zufällig Java Basics - Anfänger-Themen 3
T JList aktualisieren Java Basics - Anfänger-Themen 12
T alle Ordner in einem Ordner in JList anzeigen Java Basics - Anfänger-Themen 3
R .Jpg anzeigen lassen nach klick in JList Java Basics - Anfänger-Themen 11
F Hilfe! JList Inhalte vertauschen Java Basics - Anfänger-Themen 2
A Eintrag einer JLIST speichern Java Basics - Anfänger-Themen 3
A Anordnung von JList Elementen Java Basics - Anfänger-Themen 3
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
B Einträge im JList einfügen Java Basics - Anfänger-Themen 9
S JList mit icons UND strings für Dialogbox Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
DStrohma Index einer markierten Zeile aus einer JList bekommen? Java Basics - Anfänger-Themen 5
P JList in JPanel anzeigen Java Basics - Anfänger-Themen 2
hdi Synchronisation zwischen JList und ListModel Java Basics - Anfänger-Themen 6
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
G Elemente aus jList entferne. Java Basics - Anfänger-Themen 2
G JList updaten Java Basics - Anfänger-Themen 7
K jList scrollPane Java Basics - Anfänger-Themen 2
7 Java Swing: Wie JScrollPane zur JList hinzufügen? Java Basics - Anfänger-Themen 12
K JList verschiebt sich Java Basics - Anfänger-Themen 7
G String in JList Java Basics - Anfänger-Themen 11
T Jlist Object hinzufügen Java Basics - Anfänger-Themen 2
B Auslesen der JList Java Basics - Anfänger-Themen 11
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
M Dateien in einem Ordner, JList Java Basics - Anfänger-Themen 7
G JList größe verändert sich Java Basics - Anfänger-Themen 2
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
C jList - Zeile Markieren - jList.setSelectedIndex(wert); Java Basics - Anfänger-Themen 3
G JList mit LinkedList füllen Java Basics - Anfänger-Themen 2
G JList Mehrfachselektion Java Basics - Anfänger-Themen 6
N 2 spaltige JList, mit dynamischen Inhalt Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben