JTree node reagiert bei Klick nicht immer

drei1padsvb

Aktives Mitglied
Hallo zusammen,

habe ein etwas merkwürdiges Problem.

Ich habe in einem SplitPane links einen JTree und rechts ein Fenster, dessen Inhalte sich beim Klick auf den Tree entsprechend ändern.

Nun ist es so, dass beim Klick des letzten Nodes nicht immer die mousePressed-Methode ausgeführt wird (also sich das Fenster rechts nicht ändert).

Das verwirrende ist, dass es manchmal klappt und manchmal nicht.
Klicke ich im Tree zwischen den Nodes hin und her, geht es manchmal und manchmal eben nicht.

Das Problem habe ich lediglich beim untersten Node.

Java:
        // Erstellung des Report-Trees
        final DefaultMutableTreeNode rootReport = new DefaultMutableTreeNode(
                new ToolTip ("Report > Verwaltung", "Reportverwaltung"));
        
        DefaultMutableTreeNode fluggastInfo = new DefaultMutableTreeNode(
                new ToolTip ("Fluggastinformationen", "Berichterstellung der Fluggastinformationen"));
        DefaultMutableTreeNode sitzBelegung = new DefaultMutableTreeNode(
                new ToolTip ("Sitzbelegungen", "Berichterstellung der Sitzbelegungen"));

        rootReport.add(fluggastInfo);
        rootReport.add(sitzBelegung);
        

        final JTree tree2 = new JTree(rootReport);
        tree2.setCellRenderer( new Renderer() );
        ToolTipManager.sharedInstance().registerComponent( tree2 );
        final JScrollPane scrollTree2 = new JScrollPane(tree2);

        leftp.add(scrollTree2);

        public ReportShowPassengerinformation rpi;
        public ReportShowSeatingPlan rsp;

        rpi = new ReportShowPassengerinformation(this);
        rsp = new ReportShowSeatingPlan(this);

        rightp.add(rsp, "SeatPlanR");
        rightp.add(rpi, "PassengerPlanR");

        MouseListener m2 = new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int selRow = tree.getRowForLocation(e.getX(), e.getY());
//                TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
                if(selRow != -1) {

                    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree2
                            .getLastSelectedPathComponent();

                        if (node == null) {
                            return;

                        } else if (node.toString().equals("Report > Verwaltung")) {
                            ((CardLayout) rightp.getLayout()).show(rightp, "InfoTextReport");
                            setTitle("Flugbuchungsmanagementsystem");

                        } else if (node.toString().equals("Sitzbelegungen")) {
                            ((CardLayout) rightp.getLayout()).show(rightp, "SeatPlanR");
                            setTitle("Sitzbelegung von Flügen");

                        } else if (node.toString().equals("Fluggastinformationen")) {
                            ((CardLayout) rightp.getLayout()).show(rightp, "PassengerPlanR");
                            setTitle("Fluggastinformationen");
                        }
                }
            }
        };
        tree2.addMouseListener(m2);

Hoffe ihr seht evtl. wo der Fehler liegt, weil ich seit Tagen nicht mehr weiterkomme und mir die Ideen ausgehen.

Viele Dank!
 
Ich denke, dass der Einsatz eines MouseListeners falsch ist, sollte hier nicht eher ein TreeSelectionListener eingesetzt werden, das es ja darum geht, was im Tree selektiert wurde?

Ansonsten, lass doch einfach mal
Code:
node.toString()
auf der Konsole ausgeben, ob da immer drin steht, was Du erwartest. Eigentlich holt man sich den Inhalt eines DefaultMutableTreeNodes per
Code:
getUserObject()
 
Danke für Deine Antwort.

Den MouseListeners nutze ich, weil ich wollte, dass die entsprechende Methode auch bei wiederholtem Klick ausgeführt wird.

Ich habe es jetzt aber so geregelt, dass das nun nicht mehr nötig ist und wieder den TreeSelectionListener eingesetzt.
So geht es wieder.

Nochmal danke
 

Zurück
Oben