Hi
Ich habe heuete etwas mit Java rumgespielt und versucht, eine ein- und ausblendbare Node zu machen. Ich bin mir aber nicht sicher wenn es um Objekte in Java geht, da ich aus dem C Bereich komme (Immer etwas unklar, wann die Referenz wirklich verloren ist und wann nur die Referenz zur Referenz des Objektes gelöscht wird).
Also ich habe einen Button, der eine Node immer ein oder ausblendet. Blendet man sie ein und aus, kann man die Nodes aber nicht mehr einblenden. Ich bin ehrlich gesagt etwas überfordert, da ich dachte, man könne die Rootnode mit dem Namen root einfach removen und das wars gewesen - was aber anscheinend nicht der Fall ist (oder wie gesagt eventuell mein Fehler ist).
Das Ganze hab ich verkürzt, der Gedanke ist der, als Parameter ein JPanel mitzugeben, welches dann in einer Subklasse bearbeitet wird.
Sieht jemand einen Fehler ? Entfernen kann er sie, aber nicht mehr hinzufügen (Oder sie sind irgendwie nicht sichtbar)
Gruss
Ich habe heuete etwas mit Java rumgespielt und versucht, eine ein- und ausblendbare Node zu machen. Ich bin mir aber nicht sicher wenn es um Objekte in Java geht, da ich aus dem C Bereich komme (Immer etwas unklar, wann die Referenz wirklich verloren ist und wann nur die Referenz zur Referenz des Objektes gelöscht wird).
Also ich habe einen Button, der eine Node immer ein oder ausblendet. Blendet man sie ein und aus, kann man die Nodes aber nicht mehr einblenden. Ich bin ehrlich gesagt etwas überfordert, da ich dachte, man könne die Rootnode mit dem Namen root einfach removen und das wars gewesen - was aber anscheinend nicht der Fall ist (oder wie gesagt eventuell mein Fehler ist).
Das Ganze hab ich verkürzt, der Gedanke ist der, als Parameter ein JPanel mitzugeben, welches dann in einer Subklasse bearbeitet wird.
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame implements ActionListener
{
public static void main(String[] args)
{
new GUI();
}
private JPanel panel = new JPanel();
private JButton button = new JButton("Reload");
private int val = 0;
// Nodeclass
private NodeSwitcher NodeHandler = new NodeSwitcher();
public GUI()
{
// Setzen eines Layouts
setLayout(new BorderLayout());
add(panel, BorderLayout.CENTER);
add(button, BorderLayout.NORTH);
button.addActionListener(this);
setMinimumSize(new Dimension(150, 150));
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == button)
{
if(val == 0) // Erstellen
{
NodeHandler.createNodes(panel);
val = 1;
}
else // Löschen
{
NodeHandler.destroyNodes(panel);
val = 0;
}
}
}
}
Java:
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class NodeSwitcher
{
private DefaultMutableTreeNode root;
private JTree guiTree;
public void createNodes(JPanel v_panel)
{
// Rootnode mit 5 Childs erstellen
System.out.println("Create");
root = new DefaultMutableTreeNode("Rootnode");
guiTree = new JTree(root);
for(int i = 0; i < 5; i++)
{
root.add(new DefaultMutableTreeNode(i));
}
v_panel.setLayout(new BorderLayout());
JScrollPane scrollpane = new JScrollPane();
scrollpane.getViewport().add(guiTree);
v_panel.add(BorderLayout.CENTER, scrollpane);
v_panel.setVisible(true);
}
public void destroyNodes(JPanel v_panel)
{
// Aktuelles Rootnode samt Childs darunter löschen, um es beim erneuten Drücken des Buttons wiederherzustellen
System.out.println("Destroy");
DefaultTreeModel model = (DefaultTreeModel)guiTree.getModel();
model.setRoot(null);
}
}
Sieht jemand einen Fehler ? Entfernen kann er sie, aber nicht mehr hinzufügen (Oder sie sind irgendwie nicht sichtbar)
Gruss