Text für TreeNode

Status
Nicht offen für weitere Antworten.

Andreas29

Bekanntes Mitglied
Hi,

ich versuche gerade, mich in Swing einzuarbeiten und habe mir dazu überlegt, einen eigenen Dateiexplorer zu schreiben, weil mir das wie ein gutes Beispiel aussieht :)

Dabei bin ich auf ein kleines Problem gestoßen:
Ich habe mir ein eigenes TreeModel und einen eigenen TreeNode gebaut. Source siehe unten. Wenn ich das ganze jetzt auf ein Panel packe, welches wiederum Teil eines JFrames ist, werden mir bei den Nodes immer die absoluten Pfade angezeigt, obwohl ich in meiner TreeNode Klasse die toString()-Methode überschrieben habe. Irgendetwas scheine ich noch verkehrt zu machen. Kann mal bitte irgendwer über meine Klassen schauen und mir den entscheidenen Tipp geben?

Danke und wunderschönes Wochenende,
Andreas

Hier der Source. Zunächst die TreeNode Klasse:
Java:
package de.andreasgrund.fileexplorer.model;

import java.io.File;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

import javax.swing.tree.TreeNode;

import de.andreasgrund.fileexplorer.model.util.FileComparator;

public class FileTreeNode implements TreeNode {

	private File internal;

	private SortedSet<FileTreeNode> children;

	public FileTreeNode(File internal) {
		this.internal = internal;
		initChildren();
	}

	private void initChildren() {
		java.io.File[] listFiles = internal.listFiles();
		children = new TreeSet<FileTreeNode>(new FileComparator());
		if (listFiles != null) {
			for (java.io.File file : listFiles) {
				children.add(new FileTreeNode(file));
			}
		}
	}

	/**
	 * @see javax.swing.tree.TreeNode#children()
	 */
	@Override
	public Enumeration<?> children() {
		return Collections.enumeration(children);
	}

	@Override
	public boolean getAllowsChildren() {
		return internal.isDirectory();
	}

	@Override
	public TreeNode getChildAt(int childIndex) {
		Iterator<FileTreeNode> iterator = children.iterator();
		for (int i = 0; i <= childIndex && iterator.hasNext(); i++) {
			FileTreeNode file = iterator.next();
			if (i == childIndex) {
				return file;
			}
		}
		return null;
	}

	@Override
	public int getChildCount() {
		return children.size();
	}

	@Override
	public int getIndex(TreeNode node) {
		if (!children.contains(node)) {
			return 0;
		} else {
			FileComparator comparator = new FileComparator();
			FileTreeNode incoming = (FileTreeNode) node;
			int i = 0;
			for (FileTreeNode child : children) {
				if (comparator.compare(incoming, child) == 0) {
					return i;
				}
				i++;
			}
		}
		return 0;
	}

	@Override
	public TreeNode getParent() {
		return new FileTreeNode(internal.getParentFile());
	}

	@Override
	public boolean isLeaf() {
		return internal.listFiles().length == 0;
	}

	public File getFile() {
		return internal;
	}

	@Override
	public String toString() {
		return internal.getName();
	}
}

Und nun das Model:
Java:
package de.andreasgrund.fileexplorer.model;

import java.io.File;
import java.util.Arrays;
import java.util.List;

import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;

public class FileTreeModel extends DefaultTreeModel implements TreeModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6781409393613725593L;
	private File rootFile;

	public FileTreeModel(File rootFile, TreeNode node) {
		super(node);

		this.rootFile = rootFile;
	}

	public FileTreeModel(File rootFile, TreeNode root,
			boolean asksAllowsChildren) {
		super(root, asksAllowsChildren);

		this.rootFile = rootFile;
	}

	@Override
	public Object getChild(Object file, int index) {
		if (!(file instanceof File)) {
			return null;
		}
		File[] children = ((File) file).listFiles();
		return children[index];
	}

	@Override
	public int getChildCount(Object file) {
		if (!(file instanceof File)) {
			return 0;
		}
		return ((File) file).listFiles().length;
	}

	@Override
	public int getIndexOfChild(Object parent, Object child) {
		if (!(parent instanceof File) && !(child instanceof File)) {
			return 0;
		} else {
			File[] children = ((File) parent).listFiles();
			List<File> childrenList = Arrays.asList(children);
			return childrenList.indexOf(child);
		}
	}

	@Override
	public Object getRoot() {
		return rootFile;
	}

	@Override
	public boolean isLeaf(Object file) {
		if (!(file instanceof File)) {
			return true;
		} else {
			File[] listFiles = ((File) file).listFiles();
			if (listFiles == null) {
				return true;
			} else {
				return listFiles.length == 0;
			}
		}
	}
}
 

Ebenius

Top Contributor
Dein Modell verwaltet doch gar keine FileTreeNode-Objekte, sondern java.io.File-Objekte. Natürlich wird deren toString()-Methode gerufen, und die gibt nunmal den absoluten Dateinamen zurück.

Ebenius
 

Andreas29

Bekanntes Mitglied
Hi Ebenius,

danke das wars. Das kommt davon, wenn man erst ein eigenes Model und hinterher den Node dazu baut...

Wünsche dir und allen hier ein wunderschönes Wochenende.
Andreas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S 2D-Grafik affine Transformation für Text-Shape AWT, Swing, JavaFX & SWT 0
U WYSIWYG Text-Editor für JFrames AWT, Swing, JavaFX & SWT 8
P Text-Vorschläge für JTextField aus ner Liste laden AWT, Swing, JavaFX & SWT 8
B (Swing) Welche Komponente für unterteilten Text? AWT, Swing, JavaFX & SWT 4
J Textfelder zu groß für den Text AWT, Swing, JavaFX & SWT 10
S drawString für HTML-Text? AWT, Swing, JavaFX & SWT 7
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
K jTextArea Text sofort setzen: Statusbox für Programmablauf AWT, Swing, JavaFX & SWT 5
M Suche Komponente für mehrere 100.000 Zeile Text AWT, Swing, JavaFX & SWT 3
S Feste Breite und Höhe für einen formatierten Text. AWT, Swing, JavaFX & SWT 5
T DataFlavor für HTML-formatierten Text im JEditorPane AWT, Swing, JavaFX & SWT 8
O JTextField: Text nur für kurze Zeit anzeigen AWT, Swing, JavaFX & SWT 2
Juelin Text und Backgroundcolor im Label geht nicht AWT, Swing, JavaFX & SWT 7
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C JToggleButton disabled Text Color AWT, Swing, JavaFX & SWT 11
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
FrittenFritze Text in Flying Saucer selectierbar machen AWT, Swing, JavaFX & SWT 0
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
I Rich Text drucken AWT, Swing, JavaFX & SWT 0
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
N Promt Text der Combobox AWT, Swing, JavaFX & SWT 0
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
N In Textdatei Text anfügen per GUI AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
R Swing JTextField nicht-kopierbarer Text AWT, Swing, JavaFX & SWT 1
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
C JCheckBox disabled text color AWT, Swing, JavaFX & SWT 9
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
L JavaFX Anderer Text, wenn kein Platz ist. AWT, Swing, JavaFX & SWT 1
K JavaFX TextInputDialog Button Text ändern AWT, Swing, JavaFX & SWT 1
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Text in ein Textfeld eingeben und speichern AWT, Swing, JavaFX & SWT 27
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
C Swing Spinner als TableCellEditor - Text zu klein AWT, Swing, JavaFX & SWT 2
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
I JavaFX formatierter Text in PDF speichern AWT, Swing, JavaFX & SWT 4
T JavaFX Text des ProgressIndicators ändern AWT, Swing, JavaFX & SWT 2
E Swing Text verschwindet AWT, Swing, JavaFX & SWT 1
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
F Icons neben Text in Listview setzen AWT, Swing, JavaFX & SWT 2
K Rich Text FX von TomasMikula AWT, Swing, JavaFX & SWT 0
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
S JAVAFX HTMLEditor wrap text AWT, Swing, JavaFX & SWT 1
J JavaFX Translation Text/Label AWT, Swing, JavaFX & SWT 2
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
A JavaFX HTMLEditor in Text umwandeln AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
javampir Java FX Text verschwindet nicht AWT, Swing, JavaFX & SWT 9
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
Tom299 JavaFX Text oder Label benutzen AWT, Swing, JavaFX & SWT 4
E To get a color text on the TextArea AWT, Swing, JavaFX & SWT 4
E To get color text on the TextArea AWT, Swing, JavaFX & SWT 5
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
F JPanel "zeichnet" keinen Text AWT, Swing, JavaFX & SWT 14
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
T MausClick soll TExt ändern AWT, Swing, JavaFX & SWT 6
J Text bei Eingabe löschen AWT, Swing, JavaFX & SWT 5
A SWT Auto completion in text box AWT, Swing, JavaFX & SWT 5
C Geloest: JTextfield: Titel automatisch entfernen, sobald Text eingegeben wird AWT, Swing, JavaFX & SWT 1
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
O Swing Text aus Textfield auslesen AWT, Swing, JavaFX & SWT 8
B Text auf Display ausgeben [LWJGL] AWT, Swing, JavaFX & SWT 2
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
S TextArea get Selected row(Text) AWT, Swing, JavaFX & SWT 6
A Radio Buttons sollen den Text der text Area bestimmen AWT, Swing, JavaFX & SWT 9
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
J LayoutManager Text Spielerein GUI AWT, Swing, JavaFX & SWT 2
H Javafx - Styled Text AWT, Swing, JavaFX & SWT 5
M Text Area 1. Zeile oben AWT, Swing, JavaFX & SWT 4
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
R JavaFX Automatischer Zeilenumbruch in Text AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen


Oben