Guten Abend,
ich habe ein par mehr oder weniger große Problem mit einem JTree den ich gerade versuche zu implementiren. Nur leider fehlt mir teilweise noch ein bisschen Druchblick und Verständniss. (Ja ich habe auch schon die Tut durch und google & co).
Also ich habe einmal eine Klasse die vom JTree erbt:
und das "passende" Model dazu:
so jetzt habe ich damit ein par grundlegende Probleme die ich noch implementieren möchte, oder nicht richtig funktionieren:
Es wäre nett wenn mir da wer weiter helfen könnte, oder zumindest ein par Ideen zu spenden könnte
Ein kleines Bild gibs noch im Anhang.
mfg. Dagobert
ich habe ein par mehr oder weniger große Problem mit einem JTree den ich gerade versuche zu implementiren. Nur leider fehlt mir teilweise noch ein bisschen Druchblick und Verständniss. (Ja ich habe auch schon die Tut durch und google & co).
Also ich habe einmal eine Klasse die vom JTree erbt:
Java:
package Logfileverwaltung;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
public class LogfileOverview extends JTree{
private LogfileOverwieModel model;
public LogfileOverview(String pfad){
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Logfile's");
model = new LogfileOverwieModel(root,".\\log\\", this);
setModel(model);
}
}
und das "passende" Model dazu:
Java:
package Logfileverwaltung;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import Datum.Datumsfunktion;
public class LogfileOverwieModel extends DefaultTreeModel implements PropertyChangeListener{
LogfileOverview tree;
public LogfileOverwieModel(DefaultMutableTreeNode root, String dir, LogfileOverview tree){
super(root);
this.tree = tree;
File[] f = getLogfiles(dir);
// Die Daten richtig im Bauem darstellen
fileToTree(f);
//TODO Letzten Knoten öffnen
tree.expandPath(new TreePath(root.getLastChild().getChildAt(root.getLastChild().getChildCount()-1)));
}
private File[] getLogfiles(String dir){
File[] f = null;
File ordner = new File(dir);
if(ordner.isDirectory()){
f = ordner.listFiles(new FilenameFilter() {
@Override
public boolean accept(File f, String s) {
return s.endsWith(".log") ? true:false;
}
});
}
return f;
}
private void fileToTree(File[] f){
for(File file:f){
fileToTree(file);
}
}
private void fileToTree(File file){
try {
// Lesen des Datuma aus der Logdatei
BufferedReader br = new BufferedReader(new FileReader(file));
String datum = br.readLine();
br.close();
// Einzelteile des Datum ermitteln
int day = Integer.valueOf(datum.split("\\.")[0]);
int month = Integer.valueOf(datum.split("\\.")[1]);
int year = Integer.valueOf(datum.split("\\.")[2]);
// Element an der richtigen Stelle im Tree einordnen
DefaultMutableTreeNode current = yearToTree(year);
current = monthToTree(current, month);
DefaultMutableTreeNode insert = new DefaultMutableTreeNode(day + "." + month);
//TODO Pfad im Knoten speichern, jedoch wird dieser dann auch als Anzeigetext benutzt
insert.setUserObject(file.getPath());
current.add(insert);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private DefaultMutableTreeNode yearToTree(int year){
for(int i = 0; i < root.getChildCount(); i++){
if(root.getChildAt(i).toString().equals(String.valueOf(year))){
return (DefaultMutableTreeNode) root.getChildAt(i);
}
}
DefaultMutableTreeNode node = new DefaultMutableTreeNode(year);
((DefaultMutableTreeNode) getRoot()).add(node);
return node;
}
private DefaultMutableTreeNode monthToTree(DefaultMutableTreeNode year, int month){
for(int i = 0; i < year.getChildCount(); i++){
if(year.getChildAt(i).toString().equals(Datumsfunktion.getMonth(month-1))){
return (DefaultMutableTreeNode) year.getChildAt(i);
}
}
DefaultMutableTreeNode node = new DefaultMutableTreeNode(Datumsfunktion.getMonth(month-1));
year.add(node);
return node;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Bei Benarichtigung vom Server dem Baum das neue Logfile hinzufügen
}
}
so jetzt habe ich damit ein par grundlegende Probleme die ich noch implementieren möchte, oder nicht richtig funktionieren:
- Ich möchte den ersten Knoten immer expandiert lassen, also soll er sich nicht zusammen klappen lassen?
- Wie bekomme ich den Logfilepath in dem Knoten gespeichert und bekomme trozdem als Label das Datum angezeigt?
- Wie bekomme ich den Pfad hinterher wieder ausgelesen?
- Ich möchte nach dem erstellen des Baumes bis zum aktuellen Logfile expandieren, jedoch geht auch da meine Idee nicht =8
Es wäre nett wenn mir da wer weiter helfen könnte, oder zumindest ein par Ideen zu spenden könnte
Ein kleines Bild gibs noch im Anhang.
mfg. Dagobert