Problem mit MouseListener bei Jtree



  • Hallo,

    mein Problem ist das eventhandling eines Jtree.
    Auf einem Splitpane wird auf der linken Seite ein Jtree dargestellt. In Abhängigkeit was links im Baum selektiert ist, soll dann rechts das entsprechende jpg angezeigt werden.

    Der Fehler muss irgendwo in der anonymen Klasse des MouseListeners liegen, denn er geht nie in die Methode mouseClicked.

    Bin für jede Hilfe dankbar!

    public class TestTree extends JFrame 
    { 
    
    JTree tree; 
    JLabel lblmess; 
    JLabel lblsched; 
    ImageIcon mess; 
    ImageIcon sched; 
    TreePath tp; 
    
    DefaultTreeModel treeModel; 
    
    public TestTree () 
    { 
    super ( "Filter" ); 
    setSize ( 400, 300 ); 
    setDefaultCloseOperation ( EXIT_ON_CLOSE ); 
    } 
    
    public void init () 
    { 
    
    DefaultMutableTreeNode root = new DefaultMutableTreeNode ( "Root" ); 
    DefaultMutableTreeNode subroot = new DefaultMutableTreeNode ( "A" ); 
    DefaultMutableTreeNode subroot1 = new DefaultMutableTreeNode ( "B" ); 
    
    treeModel = new DefaultTreeModel ( root ); 
    tree = new JTree ( treeModel ); 
    
    treeModel.insertNodeInto ( subroot1, root, 0 ); 
    treeModel.insertNodeInto ( subroot, root, 0 ); 
    
    sched = new ImageIcon ( "schedule.jpg" ); 
    lblsched = new JLabel ( sched ); 
    
    UIFSplitPane pane = UIFSplitPane.createStrippedSplitPane ( JSplitPane.HORIZONTAL_SPLIT, tree, lblsched ); 
    pane.setDividerSize ( GUIConstants.DIVIDER_SIZE ); 
    pane.setDividerBorderVisible ( false ); 
    
    tree.addTreeSelectionListener ( new TreeSelectionListener () 
    { 
    public void valueChanged ( TreeSelectionEvent tse ) 
    { 
    tp = tse.getNewLeadSelectionPath (); 
    
    } 
    } ); 
    
    this.getContentPane().add ( pane, BorderLayout.CENTER ); 
    
    tree.addMouseListener ( new MouseListener () 
    { 
    public void mouseClicked ( MouseEvent e ) 
    { 
    // hier kommt er nie an, wird nix ausgegeben 
    System.out.println ( "click " ); 
    if ( e.getClickCount () == 1 ) 
    { 
    
    if ( tp.getLastPathComponent ().equals ( "A" ) ) 
    { 
    System.out.println ( "A" ); 
    } 
    else if ( tp.getLastPathComponent ().equals ( "B" ) ) 
    { 
    System.out.println ( "B " ); 
    sched = new ImageIcon ( "messages.jpg" ); 
    } 
    } 
    } 
    
    public void mouseEntered ( MouseEvent e ) 
    { 
    } 
    
    public void mouseExited ( MouseEvent e ) 
    { 
    } 
    
    public void mousePressed ( MouseEvent e ) 
    { 
    } 
    
    public void mouseReleased ( MouseEvent e ) 
    { 
    } 
    } ); 
    } 
    
    public static void main ( String args[] ) 
    { 
    TestTree tt = new TestTree (); 
    tt.init (); 
    tt.setVisible ( true ); 
    }
    


  • Wie wärs mal mit Code formatieren?

    Im Übrigen läuft dein Code (nachdem ich den speziellen Slider durch JSlider ersetzt hatte) einwandfrei.

    package de.javacore.util;
    
    import java.awt.BorderLayout;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JSplitPane;
    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.TreePath;
    
    public class TestTree extends JFrame {
    
       JTree tree;
       JLabel lblmess;
       JLabel lblsched;
       ImageIcon mess;
       ImageIcon sched;
       TreePath tp;
    
       DefaultTreeModel treeModel;
    
       public TestTree() {
          super("Filter");
          setSize(400,
                  300);
          setDefaultCloseOperation(EXIT_ON_CLOSE);
       }
    
       public void init() {
    
          DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
          DefaultMutableTreeNode subroot = new DefaultMutableTreeNode("A");
          DefaultMutableTreeNode subroot1 = new DefaultMutableTreeNode("B");
    
          treeModel = new DefaultTreeModel(root);
          tree = new JTree(treeModel);
    
          treeModel.insertNodeInto(subroot1,
                                   root,
                                   0);
          treeModel.insertNodeInto(subroot,
                                   root,
                                   0);
    
          sched = new ImageIcon("schedule.jpg");
          lblsched = new JLabel(sched);
    
          JSplitPane pane = new JSplitPane();
          pane.setDividerSize(5);
          pane.setLeftComponent(tree);
    
          tree.addTreeSelectionListener(new TreeSelectionListener() {
             public void valueChanged(TreeSelectionEvent tse) {
                tp = tse.getNewLeadSelectionPath();
    
             }
          });
    
          this.getContentPane().add(pane,
                                    BorderLayout.CENTER);
    
          tree.addMouseListener(new MouseListener() {
             public void mouseClicked(MouseEvent e) {
                // hier kommt er nie an, wird nix ausgegeben
                System.out.println("click ");
                if(e.getClickCount() == 1) {
    
                   if(tp.getLastPathComponent().equals("A")) {
                      System.out.println("A");
                   } else if(tp.getLastPathComponent().equals("B")) {
                      System.out.println("B ");
                      sched = new ImageIcon("messages.jpg");
                   }
                }
             }
    
             public void mouseEntered(MouseEvent e) {
             }
    
             public void mouseExited(MouseEvent e) {
             }
    
             public void mousePressed(MouseEvent e) {
             }
    
             public void mouseReleased(MouseEvent e) {
             }
          });
       }
    
       public static void main(String args[]) {
          TestTree tt = new TestTree();
          tt.init();
          tt.setVisible(true);
       }
    }
    


  • Danke für Antwort!

    Ich blicks nicht, es funktioniert?? Bei mir funktioniert das Umschalten auf dem rechten Panel nicht.
    Es wird rechts egal, was links ausgewählt wird immer das gleiche angezeigt.
    UNd das auch bei JSplitPane.

    Die Logik des Ändern des Bildes muss auf jeden Fall falsch sein:

    sched = new ImageIcon("messages.jpg");
    

    Hier werden bei mir auch die printl nicht angezeigt!?



  • Ich kriege bei obigem Code immer hübsch ein "click" beim Klick.



  • versuchs mal mit den mousePressed und mouseReleased eventlisteners. manche systeme generieren events "seltsam" (allen voran mac os)



  • Danke, ich bin mit meiner IDE nicht zurecht gekommen.

    Sorry hat lang gedauert.. Also listener funktioniert, nur das refreshen des .jpg noch nicht


Anmelden zum Antworten