Ich kriegs irgendwie nicht gebacken das sich mein JTree aktualisiert (optisch). Die Daten für den Tree, sprich die Arrays ändern sich genau so wie ich es haben will, doch der Tree im Frame ändert sich nicht. Ich arbeite mit dem DefaultTreeModel, und habe gelesen das sich der Tree mit der Methode .reload() optisch ändern soll, doch das tut er nicht.
Ich hoffe es ist einiger Maßen verständlich, ist ein recht großes Programm und wurde deshalb etwas gekürzt
Hauptfenster mit JTree
Kosten-Klasse
Ich hoffe es ist einiger Maßen verständlich, ist ein recht großes Programm und wurde deshalb etwas gekürzt
Hauptfenster mit JTree
Java:
public class Hauptfenster extends javax.swing.JFrame {
private ArrayList<running> EinnahmenRunning; //Die verschiedenen Arrays mit den Daten für den Tree
private ArrayList<steady> EinnahmenSteady;
private ArrayList<running> KostenRunning;
private ArrayList<steady> KostenSteady;
private String User;
private JTree tree;
private DefaultTreeModel model;
public Hauptfenster(String Username) {
User=Username;
EinnahmenRunning=new ArrayList();
EinnahmenSteady=new ArrayList();
KostenRunning=new ArrayList();
KostenSteady=new ArrayList();
initComponents();
TreeNode root = initJTree(); //Tree wird aufgebaut/gefüllt
model = new DefaultTreeModel(root);
tree = new JTree(model);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener(new SelectionListener() {});
JPanelTree.add(tree);
setVisible(true);
}
public TreeNode initJTree(){
//Grundgerüst des Trees
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Einnahmen und Kosten");
DefaultMutableTreeNode Einnahmen = new DefaultMutableTreeNode("Einnahmen");
DefaultMutableTreeNode Kosten = new DefaultMutableTreeNode("Kosten");
DefaultMutableTreeNode KostenLaufend = new DefaultMutableTreeNode("Laufend");
DefaultMutableTreeNode KostenStatisch = new DefaultMutableTreeNode("Statisch");
DefaultMutableTreeNode EinnahmenLaufend = new DefaultMutableTreeNode("Laufend");
DefaultMutableTreeNode EinnahmenStatisch = new DefaultMutableTreeNode("Statisch");
root.add(Kosten);
root.add(Einnahmen);
Kosten.add(KostenLaufend);
Kosten.add(KostenStatisch);
Einnahmen.add(EinnahmenLaufend);
Einnahmen.add(EinnahmenStatisch);
EinnahmenRunning = einnahmenFrame.getEinnahmenRunning();
//Inhalte zum Baum hinzufügen
for (running EinnahmenRunning1 : EinnahmenRunning) {
DefaultMutableTreeNode a = new DefaultMutableTreeNode(EinnahmenRunning1.getName());
EinnahmenLaufend.add(a);
}
//System.out.println(EinnahmenRunning.size());
for (steady EinnahmenSteady1 : EinnahmenSteady) {
DefaultMutableTreeNode a = new DefaultMutableTreeNode(EinnahmenSteady1.getName());
EinnahmenStatisch.add(a);
}
.
.
.
}
//Kosten hinzufügen, bzw die Klasse Kosten aufrufen
private void KostenAendernButtonActionPerformed(java.awt.event.ActionEvent evt) {
Kosten kosten = new Kosten(this);
kosten.setVisible(true);
}
}
Kosten-Klasse
Java:
public class Kosten extends javax.swing.JFrame {
private ArrayList<running> KostenRunning = new ArrayList();
private ArrayList<steady> KostenSteady = new ArrayList();
private DefaultListModel listModel = new DefaultListModel();
private Hauptfenster hauptFrame;
public Kosten(Hauptfenster fenster) {
this.hauptFrame=fenster;
initComponents();
this.addWindowListener(new WindowAdapter() { //beim schließen des Fensters sollen die Daten übergeben werden
public void windowClosing(WindowEvent event) {
safeDataintoHauptFrame();
}
}
);
}
/*...
Daten werden in die Arrays eingefügt
......*/
public void safeDataintoHauptFrame() {
hauptFrame.setKostenRunning(KostenRunning); //Array KostenRunning wird an das Hauptfenster übergeben
hauptFrame.setKostenSteady(KostenSteady);
hauptFrame.setTree(new JTree(hauptFrame.initJTree())); //die neuen Nodes werden angefügt
DefaultTreeModel model = (DefaultTreeModel) hauptFrame.getTree().getModel(); //Sollte den JTree aktualisieren
model.reload();
hauptFrame.getTree().setModel(model);
hauptFrame.getJPanelTree().repaint();
setVisible(false);
}
Zuletzt bearbeitet: