Hallo,
Ich habe einen JTree erstellt in einer eigenen Klasse, dieser soll in meinem Hauptframe "MasterFrame" in das Object "master" eingesetzt werden.
In der JTree-Klasse "Verzeichnissstruktur" wird mir beim übergeben jedoch eine NullPointerException beim ausführen angezeigt.
Der übergebene JTree ist jedoch vorher Ordentlich Initialisiert worden und kann keine null-referenz übergeben.
Hier der Fehlercode:
Exception in thread "main" java.lang.NullPointerException
at Benutzeroberfläche.Verzeichnisstruktur.<init>(Verzeichnisstruktur.java:43)
at Benutzeroberfläche.MasterFrame.<init>(MasterFrame.java:106)
at Benutzeroberfläche.MasterFrame.main(MasterFrame.java:54)
Hier die beiden betreffenden Klassen.
Für mich sieht es so aus als wenn er das master-Objekt nicht findet aber ich wüsste nicht wieso da es als allererstes initialisiert wird.
Vielen Dank =)
Ich habe einen JTree erstellt in einer eigenen Klasse, dieser soll in meinem Hauptframe "MasterFrame" in das Object "master" eingesetzt werden.
In der JTree-Klasse "Verzeichnissstruktur" wird mir beim übergeben jedoch eine NullPointerException beim ausführen angezeigt.
Der übergebene JTree ist jedoch vorher Ordentlich Initialisiert worden und kann keine null-referenz übergeben.
Hier der Fehlercode:
Exception in thread "main" java.lang.NullPointerException
at Benutzeroberfläche.Verzeichnisstruktur.<init>(Verzeichnisstruktur.java:43)
at Benutzeroberfläche.MasterFrame.<init>(MasterFrame.java:106)
at Benutzeroberfläche.MasterFrame.main(MasterFrame.java:54)
Hier die beiden betreffenden Klassen.
Java:
package Benutzeroberfläche;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.ScrollPaneConstants;
import Funktionalität.Eintrag;
import Funktionalität.Verzeichnis;
public class MasterFrame implements ActionListener {
public static MasterFrame master;
private JPanel a;
private JScrollPane b;
private JScrollPane c;
private JPanel d;
private JPanel bb;
private JPanel cc;
private GridBagLayout layout;
private GridBagLayout eintraglayout;
private FlowLayout aLayout;
private JFrame f;
private Verzeichnisstruktur baum;
private JMenuBar menuBar;
private JButton sammlungenausblenden;
private JButton sammlungeneinblenden;
private JButton neuesammlung;
public static void main(String[] args){
master = new MasterFrame();
}
public MasterFrame(){
a = new JPanel();
aLayout = new FlowLayout(FlowLayout.LEFT,5,5);
a.setLayout(aLayout);
bb = new JPanel();
b = new JScrollPane(bb,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
cc = new JPanel();
eintraglayout = new GridBagLayout();
cc.setLayout(eintraglayout);
c = new JScrollPane(cc,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
d = new JPanel();
a.setBackground(Color.red);
bb.setBackground(Color.yellow);
cc.setBackground(Color.blue);
d.setBackground(Color.white);
f = new JFrame("Sammelfuchs");
f.setMinimumSize(new Dimension(800, 600));
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
layout = new GridBagLayout();
f.setLayout(layout);
setLayout(0);
menuBar = new JMenuBar();
makeMenu();
f.setJMenuBar( menuBar );
f.add(a);
f.add(c);
f.add(d);
sammlungenausblenden = new JButton( "Sammlungen ausblenden" );
sammlungenausblenden.setActionCommand("sammlungenausblenden");
sammlungenausblenden.addActionListener(this);
sammlungeneinblenden = new JButton( "Sammlungen einblenden" );
sammlungeneinblenden.setActionCommand("sammlungeneinblenden");
sammlungeneinblenden.addActionListener(this);
neuesammlung = new JButton( "Neue Sammlung" );
neuesammlung.setActionCommand("neuesammlung");
neuesammlung.addActionListener(this);
buttons(0);
baum = new Verzeichnisstruktur();
f.validate();
}
public static void setConstraints(Component a,GridBagLayout c,int gridx, int gridy, int gridwith, int gridheight,int ipadx,int ipady, double weightx, double weighty, int fill, int anchor){
GridBagConstraints cons = new GridBagConstraints(); //Bereinigung der Constrains (Alles auf Null setzen weil neu)
cons.gridx = gridx; //In welcher Spalte startet das Objekt
cons.gridy = gridy; //in welcher Zeile endet das Objekt
cons.gridwidth = gridwith; //Wieviele Spalten nimmt das Objekt ein
cons.gridheight = gridheight; //Wieviele Zeilen nimmt das Objekt ein
cons.ipadx = ipadx; //Wie Breit ist das Objekt Mindestens
cons.ipady = ipady; //Wie Hoch ist das Objekt Mindestens
cons.weightx = weightx; //Prozentualer Wert der Breite
cons.weighty = weighty; //Prozentualer Wert der Höhe
cons.fill = fill;
cons.anchor = anchor;
c.setConstraints(a,cons);
}
public void setLayout(int x){
if(x==0){
setConstraints(a,layout,0,0,2,1,1,0,0.0,0.0,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
setConstraints(b,layout,0,1,1,1,200,0,0.0,1.0,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
setConstraints(c,layout,1,1,1,1,1,1,1.0,0.1,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
setConstraints(d,layout,0,3,2,1,1,20,1.0,0.0,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
f.add(b);
f.validate();
f.repaint();
}else if(x==1){
f.remove(b);
f.validate();
f.repaint();
}
}
public void makeMenu() {
JMenu neu = new JMenu( "Neu" );
menuBar.add( neu );
neu.add(new JMenuItem("Sammlung"));
neu.add(new JMenuItem("Eintrag"));
JMenu ansicht = new JMenu( "Ansicht" );
menuBar.add( ansicht );
ansicht.add(new JCheckBoxMenuItem("Sammlungen einblenden"));
JMenu hilfe = new JMenu( "Hilfe" );
menuBar.add( hilfe );
JMenu ueber = new JMenu( "Über" );
menuBar.add( ueber );
}
public void buttons(int x){
if(x==0){
a.removeAll();
a.add(sammlungenausblenden);
a.add(neuesammlung);
a.validate();
f.repaint();
}else if(x==1){
a.removeAll();
a.add(sammlungeneinblenden);
a.add(neuesammlung);
a.validate();
f.repaint();
}
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("sammlungeneinblenden")){
buttons(0);
setLayout(0);
}else if(e.getActionCommand().equals("sammlungenausblenden")){
buttons(1);
setLayout(1);
}else if(e.getActionCommand().equals("neuesammlung")){
new Dialoge(f,"neueSammlung");
}
}
public void addTree(JTree tree) {
bb.add(tree);
}
public JFrame getF() {
return f;
}
public void setUserObjektLayout(Verzeichnis a){
cc.removeAll();
JLabel name = new JLabel(a.getName());
setConstraints(name,eintraglayout,0,0,2,1,1,1,0.0,1.0,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
cc.add(name);
f.validate();
f.repaint();
}
public void setUserObjektLayout(Eintrag a){
cc.removeAll();
JLabel name = new JLabel(a.getName());
setConstraints(name,eintraglayout,0,0,2,1,1,1,0.0,0.0,GridBagConstraints.BOTH,GridBagConstraints.CENTER);
cc.add(name);
f.validate();
f.repaint();
}
public Verzeichnisstruktur getBaum() {
return baum;
}
}
Java:
package Benutzeroberfläche;
import java.awt.Dimension;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreePath;
import Funktionalität.Eintrag;
import Funktionalität.Verzeichnis;
public class Verzeichnisstruktur implements TreeSelectionListener{
private DefaultMutableTreeNode root;
private DefaultTreeModel treemodel;
private JTree tree;
private DefaultTreeSelectionModel selectionTree;
private static int sammlungZaehler = -1;
public Verzeichnisstruktur(){
root = new DefaultMutableTreeNode();
treemodel = new DefaultTreeModel(root);
tree = new JTree();
tree.setModel(treemodel);
tree.setMinimumSize( new Dimension() );
selectionTree = new DefaultTreeSelectionModel();
selectionTree.setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setSelectionModel(selectionTree);
tree.addTreeSelectionListener(this);
TreePath path = new TreePath(root);
tree.expandPath(path);
MasterFrame.master.addTree(tree);
MasterFrame.master.getF().validate();
MasterFrame.master.getF().repaint();
}
public void verzeichnis(String a){
DefaultMutableTreeNode verzeichnis = new DefaultMutableTreeNode();
verzeichnis.setUserObject(new Verzeichnis(a));
Verzeichnisstruktur.sammlungZaehler = Verzeichnisstruktur.sammlungZaehler +1;
/*sammlungZaehler = sammlungZaehler + 1;
DefaultMutableTreeNode x = new DefaultMutableTreeNode();
x.setUserObject(new Eintrag(a));
treemodel.insertNodeInto(x, root, sammlungZaehler); */
}
public void valueChanged(TreeSelectionEvent e){
TreePath tp = tree.getSelectionPath();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tp.getLastPathComponent();
Object userObject = selectedNode.getUserObject();
if(selectedNode.isLeaf() == true && selectedNode.getLevel() == 0){
Verzeichnis b = (Verzeichnis)userObject;
MasterFrame.master.setUserObjektLayout(b);
}else if(selectedNode.isLeaf() == true){
Eintrag a = (Eintrag)userObject;
MasterFrame.master.setUserObjektLayout(a);
}else if(selectedNode.isLeaf() == false){
Verzeichnis b = (Verzeichnis)userObject;
MasterFrame.master.setUserObjektLayout(b);
}
}
}
Für mich sieht es so aus als wenn er das master-Objekt nicht findet aber ich wüsste nicht wieso da es als allererstes initialisiert wird.
Vielen Dank =)