Panel zur Dateiendarstellung wie in einem Explorer

sofarsohood

Mitglied
Hallo,

zur Zeit entwickle ich eine Java Anwendung in der unter anderem Dateien wie in einem Explorer (z.B. Windows oder Mac) dargestellt werden sollen.

Daher meine Fragen:
- Hat irgendwer einen Ansatz oder eine Idee wie ich die Dateien darstellen kann ? (zur Zeit sind das Icons in einem JLabel -> sieht nicht gerade gut aus)

- Ich suche des weiteren als Lösungsmöglichkeit eventuell eine Methode nur das Datei-Darstellungsfenster eines JFileChoosers zu verwenden. Hat in diese Richtung schon mal wer etwas gemacht ?

Natürlich sind alle auch alle anderen Lösungsvorschläge willkommen, die folgendes ermöglichen:
- Bilder einlesen (als File) und in skalierter Form auf einem Panel darstellen.
- Später soll Drag & Drop implementiert werden
- Später soll bei einem Mouse over (Hover) Event ein Panel mit genaueren Informationen erscheinen
- Im Prinzip ist es nichts anderes als ein normaler File Browser, der eine Komponente in meinem Programm darstellen soll. Dies soll möglichst schnell und flüssig funktionieren. Um das zu erreichen, sind mir auch alle Mittel und Lösungsansätze recht !

Ich freue mich auf eure Hilfe
sofar
 

sofarsohood

Mitglied
Danke für die Antwort, hilft mir aber leider nicht weiter :/

Mir würde es um die grafische Darstellung einer Datei gehen (z.B. icon und darunter der Name der Datei).

lg
sofar
 

turtle

Top Contributor
Soll es mit Swing sein?

Das Panel, das Dateien/Directories anzeigen soll, würde ich mit einem JTree machen.

Wenn die normale Darstellung im JTree nicht ausreicht, kannst du einen eigenen TreeCellRenderer schreiben, der genau die Anzeige macht, die du haben möchtest.

Bleibt noch die Erkennung des File Typs, damit du ein passendes Icon rendern kannst. Ich kenne keine Bibliothek, die dies zuverlässig macht. Unter Windows würde ich mich wohl auf die Extension stützen.
 

sofarsohood

Mitglied
Jop, es soll in Seing entwickelt werden. Der JTree mit den Icons steht schon. Nun möchte ich allerdings, sobald ein Ordner im JTree angeklickt wird, die Dateien dieses Ordners in einem JPanel darstellen. Allerdings soll das so wie in einem Dateibrowser aussehen. Genauer gesagt wie die Ansicht "Kacheln". Es soll also ein Icon für die Dateiart zugewiesen werden und der Name der Datei soll darunter stehen. Ich hoffe ihr könnt jetzt besser verstehen was ich meine.
 

turtle

Top Contributor
Als Content-Panel würde ich JList nehmen. Zwischen JTree und JList eine SplitPane

Dieses Beispiel, was ich gefunden habe, zeigt ziemlich genau, was ich meinte;) Lediglich die SplitPane fehlt...
Java:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.io.File;
import java.io.FileFilter;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileSystemView;

public class FileList {

	public Component getGui(File[] all, boolean vertical) {
		JList fileList = new JList(all);
		fileList.setCellRenderer(new FileRenderer(!vertical));

		if (!vertical) {
			fileList.setLayoutOrientation(javax.swing.JList.HORIZONTAL_WRAP);
			fileList.setVisibleRowCount(-1);
		} else {
			fileList.setVisibleRowCount(9);
		}
		return new JScrollPane(fileList);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				File f = new File(System.getProperty("user.home"));
				FileList fl = new FileList();
				Component c1 = fl.getGui(f.listFiles(new TextFileFilter()),
						true);

				Component c2 = fl.getGui(f.listFiles(new TextFileFilter()),
						false);

				JFrame frame = new JFrame("File List");
				JPanel gui = new JPanel(new BorderLayout());
				gui.add(c1, BorderLayout.WEST);
				gui.add(c2, BorderLayout.CENTER);
				c2.setPreferredSize(new Dimension(375, 100));
				gui.setBorder(new EmptyBorder(3, 3, 3, 3));

				frame.add(gui);
				frame.pack();
				frame.setLocationByPlatform(true);
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
	}
}

class TextFileFilter implements FileFilter {

	@Override
	public boolean accept(File file) {
		// implement the logic to select files here..
		String name = file.getName().toLowerCase();
		// return name.endsWith(".java") || name.endsWith(".class");
		return name.length() < 20;
	}
}

class FileRenderer extends DefaultListCellRenderer {

	private final boolean pad;
	private final Border padBorder = new EmptyBorder(3, 3, 3, 3);

	FileRenderer(boolean pad) {
		this.pad = pad;
	}

	@Override
	public Component getListCellRendererComponent(JList list, Object value,
			int index, boolean isSelected, boolean cellHasFocus) {

		Component c = super.getListCellRendererComponent(list, value, index,
				isSelected, cellHasFocus);
		JLabel l = (JLabel) c;
		File f = (File) value;
		l.setText(f.getName());
		l.setIcon(FileSystemView.getFileSystemView().getSystemIcon(f));
		if (pad) {
			l.setBorder(padBorder);
		}

		return l;
	}
}
 
Zuletzt bearbeitet:

frankyv

Mitglied
Ich stimme turtle zu.
Wenn Dateiverzeichnis im JTree gewählt wird dann JList aktualisieren.
Problematisch wird es wenn du die Systemicons für die Dateien haben willst.
Denn die stehen unter Windows in der R e g i s t r y, und ob du auf die mit
Java Zugriff hast, das weiß ich nicht.

lg
 

sofarsohood

Mitglied
Die icons für den JTree hab ich bereits (lässt sich für den normalen JTree aus existierenden Files holen). Für den xml-Tree habe ich noch keine Lösung.

Naja die Dateivorschau bzw. Darstellung in Kachelform (alà Windows, etc. Dateiexplorer) fehlt mir aber noch :/
 

frankyv

Mitglied
Für die Images würd ich empfehlen, dass du dir eine Grafikbibliothek suchst, die das Konvertieren
in Thumbnails unterstützt (das muss natürlich schnell gehen).

Als Startpunkt empfehle ich:

ImageMagick

lg:)
 

sofarsohood

Mitglied
Ahhhh, ein Schritt in die richtige Richtung, Danke vorerst !

Werde mich da mal einlesen, hoffentlich ist die Library nicht zu groß, mein Projekt sollte ein relativ kompaktes Programm bleiben :D
 

frankyv

Mitglied
Kleine Hilfestellung für die Installation von JMagick:

How to Install JMajick on Windows

Go to Download Site (or any other version of your choice)
Download ImageMagick-6.3.9-0-Q8-windows-dll.exe and jmagick-win-6.3.9-Q8.zip.
Install the exe file. This will install ImageMagick which is a prerequisite for JMagick to work.
Now extract the zip file. This will give jmagick.dll and jmagick.jar.
Copy the jmagick.jar to you lib folder and include it in the classpath.
Copy the jmagick.dll to the root installation directory of ImageMagic and add it as an entry to the PATH environment variable.
JMagick is installed :).

Kurzer Beispiel-Code:

Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.net.URL;

class ResizeImage {

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://pscode.org/media/citymorn2.jpg");
        final BufferedImage bi = ImageIO.read(url);

        Runnable r = new Runnable() {
            public void run() {
                JLabel unresize = new JLabel(new ImageIcon(bi));

                int width = (int)(bi.getWidth()*.75);
                int height = (int)(bi.getHeight()*.75);

                BufferedImage bi1 = new BufferedImage(width, height, 
                    BufferedImage.TYPE_INT_RGB);
                Graphics g1 = bi1.getGraphics();
                g1.drawImage( bi, 0, 0, width, height, null );
                JLabel easyResize = new JLabel(new ImageIcon(bi1));

                JPanel p = new JPanel();
                p.add( unresize );
                p.add( easyResize );

                JOptionPane.showMessageDialog(null, p);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
Thallius Swing Merkwürdiges Verhalten beim Panel Tausch Allgemeine Java-Themen 3
P Font aus PDF extrahieren -> im Panel anzeigen Allgemeine Java-Themen 3
R Panel mit 8 gleich großen "fenstern" Allgemeine Java-Themen 11
S TextDatei in Panel anzeigen Allgemeine Java-Themen 10
M RSS Feeder Panel Probleme mit Tabs Allgemeine Java-Themen 3
G AWT Panel wird nicht dargestellt Allgemeine Java-Themen 3
A gezeichnetes Objekt auf Panel identifizieren Allgemeine Java-Themen 5
F Panel wird nicht angezeigt Allgemeine Java-Themen 2
G von großem Panel auf ein kleines Panel mappen Allgemeine Java-Themen 6
MQue Popup- Menue- trennen von Panel und Aktion Allgemeine Java-Themen 6
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
H Problem beim Malen auf ein Panel Allgemeine Java-Themen 2
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
G Panel einer Klasse in einer anderen anzeigen Allgemeine Java-Themen 4
C Hilfe! Java Control Panel & Limewire Problem! Allgemeine Java-Themen 3
T Rechtecke usw mit Paint auf Panel zeichnen Allgemeine Java-Themen 5
J Panel-Hintergrundbild Allgemeine Java-Themen 13
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
P Feststellen, Welche Classes ich aus einem JAR nutze? Allgemeine Java-Themen 6
Jose05 mit 2 - 3 Personen an einem Projekt coden Allgemeine Java-Themen 2
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
Zrebna DeleteNode-Funktionalität in einem AVL-Tree Allgemeine Java-Themen 5
pkm Warnungen in einem Drools-Projekt unterdrücken? Allgemeine Java-Themen 1
D Arbeiten mit einem Bitarray Allgemeine Java-Themen 13
D Union in einem Struct in JNA Allgemeine Java-Themen 5
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
R Zoom In einem grid Allgemeine Java-Themen 0
M java.io.EOFException bei einem DataoutputStream ?! Allgemeine Java-Themen 2
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Fahrtsimulation von einem Zug Allgemeine Java-Themen 0
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
G JTextField Inhalt in einem Long einfügen Allgemeine Java-Themen 2
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
B Maven Zugriff auf files aus einem kompilierten jar Allgemeine Java-Themen 15
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
K Classpath Alle Classen aus einem Package lesen Allgemeine Java-Themen 7
K Auf einer Website nach einem String suchen Allgemeine Java-Themen 5
P Zwei Applikationen mit einem Job Allgemeine Java-Themen 0
Sin137 OOP Auf JPanel zugreifen, das einem JTabbePane hinzugefügt worden ist Allgemeine Java-Themen 10
E Die if-Anweisung in einer Java Bean bzw. in einem Servlet? Allgemeine Java-Themen 8
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
M Ein Programm das nur von einem bestimmten Programm geöffnet werden kann Allgemeine Java-Themen 7
H Klammerberechnungen bei einem Taschenrechner Allgemeine Java-Themen 2
S Kann man mit einem GeneralPath.curveTo ein GeneralPath.quadTo ersetzen..? Allgemeine Java-Themen 2
Seikuassi Alle Escape-Sequenzen in einem String ersetzen Allgemeine Java-Themen 4
S Rekursive Suche in einem Netz Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
M Zeilen zu einem DefaultTableModel hinzufügen Allgemeine Java-Themen 1
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
M Abonnentenzahl, Aufrufe, etc. von einem YouTube-Kanal anzeigen Allgemeine Java-Themen 7
B Fehler bei einem Programm Allgemeine Java-Themen 10
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
F Punkte in einem Bild finden Allgemeine Java-Themen 10
M Eclipse Eine xhtml aus einem JSF Projekt starten Allgemeine Java-Themen 2
M String an einem abschnitt ändern Allgemeine Java-Themen 14
I Zu zweit an einem Projekt? Allgemeine Java-Themen 1
S Methoden Stunden seit einem bestimmten Zeitpunkt Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben