TreeModel: Ändern der Folderanzeige

Status
Nicht offen für weitere Antworten.

tuttogaz

Mitglied
Hallo

Bin blutiger Anfaenger in Java und moechte folgendes Listing aus dem o'Reilleys book in der Form abaendern, dass die Pfade in einem Treebaum die Parentverzeichnisse nicht anzeigen. Sprich, wenn man z.b. ins Windows Verzeichnis klickt, moechte ich nicht c:\Windows\System angezeigt haben, sondern nur System.
Leider war mir das nicht moeglich, wenn man den return Wert in der getChild() Methode aendert, dann funktioniert der Baum nicht mehr.
Muss ich da irgendeine Methode von JTree ueberschreiben?

Hoffe die Frage ist nicht zu basic,

lG Armin

Code:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.io.File;

public class explorer {
  public static void main(String[] args) {
	File root = new File("c:\\");
	FileTreeModel model = new FileTreeModel(root);
	JTree tree = new JTree(model);

	// tree.setModel(model);
	JScrollPane scrollpane = new JScrollPane(tree);
	JFrame frame = new JFrame("FileTreeDemo");
	frame.getContentPane().add(scrollpane, "Center");
	frame.setSize(400,600);
	frame.setVisible(true);
  }
}


class FileTreeModel implements TreeModel {
  protected File root;
  public FileTreeModel(File root) { this.root = root; }

  public Object getRoot() { return root; }

  public boolean isLeaf(Object node) {  return ((File)node).isFile(); }

  public int getChildCount(Object parent) {
	String[] children = ((File)parent).list();
	if (children == null) return 0;
	return children.length;
  }

  public Object getChild(Object parent, int index) {
	String[] children = ((File)parent).list();
	if ((children == null) || (index >= children.length)) return null;
	return new File((File) parent, children[index]);
  }

  public int getIndexOfChild(Object parent, Object child) {
	String[] children = ((File)parent).list();
	if (children == null) return -1;
	String childname = ((File)child).getName();
	for(int i = 0; i < children.length; i++) {
	  if (childname.equals(children[i])) return i;
	}
	return -1;
  }

  public void valueForPathChanged(TreePath path, Object newvalue) {}

  public void addTreeModelListener(TreeModelListener l) {}
  public void removeTreeModelListener(TreeModelListener l) {}
}
 
B

Beni

Gast
Am einfachsten setzt du einen neuen TreeCellRenderer, (mit Hilfe der Methode setCellRenderer )

Es genügt wahrscheinlich, wenn du den DefaultTreeCellRenderer nimmst und ihn noch ein bisschen erweiters. Das dürfte etwa so funktionieren:

Code:
public class FileTreeCellRenderer extends DefaultTreeCellRenderer(){
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus){
    super.getTreeCellRendererComponent( tree, "", selected, expanded, leaf, row, hasFocus );

    setText( ((File)value).getName() );  // Der Text, der angezeigt werden soll. Weiss aber nicht mehr, ob das tatsächlich "getName" heisst, oder ob man das anders schreiben muss.

    return this;
  }
}

mfg Beni
 

tuttogaz

Mitglied
Danke fuer deine Antwort, aber mir ist nicht ganz klar wie ich das machen soll. Die Klasse FileTreeModel implementiert ja die Schnittstelle TreeModel, das heisst ich kann ja nicht die Methode setCellRenderer aufrufen, weil die ist ja eine Methode von der JTree Klasse.

lG Armin
 
B

Beni

Gast
Du sollst ja auch die Methode vom JTree aufrufen :wink:
Es geht darum, dass man dasselbe Object auf verschiedene Arten zeichnen kann. Das zeichnen übernimmt der TreeCellRenderer... also kann man ihn einfach ersetzen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Swing 2 TreeModel und ein JTree synchronisieren AWT, Swing, JavaFX & SWT 3
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
C Swing JTree und TreeModel AWT, Swing, JavaFX & SWT 15
O Swing TreeModel reload nur scheinbar AWT, Swing, JavaFX & SWT 2
S JTree mit Daten aus Model füllen, eigenes TreeModel (gute Dokumentation des Problems) AWT, Swing, JavaFX & SWT 2
M JTree und TreeModel mit 2 Klassen AWT, Swing, JavaFX & SWT 3
D Darstellungsproblem des eigenen TreeModel bei Veränderungen AWT, Swing, JavaFX & SWT 7
T JTree - TreeModel AWT, Swing, JavaFX & SWT 3
B JTree & Treemodel AWT, Swing, JavaFX & SWT 3
J JTree/TreeModel add/delete Methoden AWT, Swing, JavaFX & SWT 2
H JTree und TreeModel AWT, Swing, JavaFX & SWT 4
M Wie einen JTable editierbar machen (mit eigenem TreeModel) AWT, Swing, JavaFX & SWT 2
C TreeModel zu langsam für EventDispatchThread AWT, Swing, JavaFX & SWT 5
A (Default)TreeModel und wie die Daten hinein bekommen AWT, Swing, JavaFX & SWT 5
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
R Swing JOptionPane Sprache Ändern AWT, Swing, JavaFX & SWT 4
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
K JButton Problem beim Schriftfarbe Ändern AWT, Swing, JavaFX & SWT 2
E Swing Verzögerung beim Hinzufügen / Ändern von Swingkomponenten AWT, Swing, JavaFX & SWT 3
L "Fremdes" JPanel von MouseEvent aus Ändern AWT, Swing, JavaFX & SWT 2
philipp Ändern des Inhalts eines Containers nicht möglich AWT, Swing, JavaFX & SWT 2
M Swing Ändern des Themes einer fremden Applikation AWT, Swing, JavaFX & SWT 8
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
A Schriftfarbe von jTabbedPane und Button Ändern AWT, Swing, JavaFX & SWT 7
A JTappedPane layout Ändern? AWT, Swing, JavaFX & SWT 7
P JList Index Ändern Problem AWT, Swing, JavaFX & SWT 4
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
P Bug in Java? - Problem beim Ändern von Spaltentiteln AWT, Swing, JavaFX & SWT 2
vogella JTable - Hinzufügen von Datensätzen und Ändern von Daten AWT, Swing, JavaFX & SWT 2
T Ändern des Default-Aussehens einer JComboBox AWT, Swing, JavaFX & SWT 3
C Ändern eines JTextFields bei DocumentListener Event AWT, Swing, JavaFX & SWT 2
C Seiteneffekte beim Ändern der Größe des Frames AWT, Swing, JavaFX & SWT 8
G Ändern der Standartschrift vom LookAndFeel AWT, Swing, JavaFX & SWT 4
R "\t" LnF abhängig !? - Ändern? AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben