Avatar billede jesperthomsen1980 Nybegynder
10. december 2002 - 23:05 Der er 6 kommentarer og
1 løsning

Hvordan tilføjer man en actionListener på en JTree

Hej med jer...
Hvordan kan man indsætte en actionListener på en menupunkt på en JTree?
Det er endnu et enkelt eksempel på en JTree, men skal senere udvikles så man kan skifte mellem forskellige JPanels ved at trykke på menupunkterne  i JTree'et!

Håber én kan hjælpe mig!

import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class TreeFrame {

    public TreeFrame()
    {
        JFrame frame = new JFrame("Tree example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        MutableTreeNode top = createTree();
        JTree tree = new JTree(top);
        tree.setRootVisible(true);
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
       
        frame.getContentPane().add(new JScrollPane(tree));
       
        frame.pack();
        frame.setVisible(true);
    }
   
    private MutableTreeNode createTree()
    {
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("Top");
        DefaultMutableTreeNode p1 = new DefaultMutableTreeNode(new Integer(5));
        top.add(p1);
       
        top.add(new DefaultMutableTreeNode("Sub 2"));
        p1.add(new DefaultMutableTreeNode("Sub 3"));
       
        return top;
   
   
    }

    public static void main (String args[]) {
        new TreeFrame();
    }

}
Avatar billede aslan Nybegynder
10. december 2002 - 23:19 #1
Måske du får en ide...


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.sql.*;
import java.util.*;
import javax.swing.text.*;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.*;

public class Tree extends JApplet implements ActionListener {
    Sql sql = new Sql();
   
    Container panel = getContentPane();
   
    Hashtable index = new Hashtable();
    Hashtable index2 = new Hashtable();
   
    JScrollPane scroller,feltScroller;
    JButton nyTraad,svarTraad;
    JTextArea traadText;
    JTextPane felt,test;
    JTextField navn,email,besked,emne;
    JOptionPane skriveFelt1;
    JTree tree=null;
    DefaultMutableTreeNode top =null;
    DefaultMutableTreeNode node=null;
    DefaultTreeModel treeModel;
   
    Object parent=null;
    int parentId=0;
    public void init() {
        tree();
    }
   
    public void tree() {
       
        panel.setLayout(null);
        panel.setBackground(Color.white);
       
        top = new DefaultMutableTreeNode("Forum");
        treeModel = new DefaultTreeModel(top);
        //treeModel.addTreeModelListener(new MyTreeModelListener());
       
        tree = new JTree(treeModel);
        //JTreeUpdater updater = new JTreeUpdater(tree);
        tree.setEditable(false);
        tree.setRootVisible(true);
        tree.setShowsRootHandles(true);
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
       
        DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
        renderer.setOpenIcon(null);
        renderer.setClosedIcon(null);
        renderer.setLeafIcon(null);
        tree.setCellRenderer(renderer);
       
        nyTraad = new JButton("Ny Tråd");
        nyTraad.setBounds(100,5,110,20);
        nyTraad.addActionListener(this);
        panel.add(nyTraad);
       
        svarTraad = new JButton("Svar på Tråd");
        svarTraad.setBounds(325,5,110,20);
        svarTraad.addActionListener(this);
        panel.add(svarTraad);
       
        scroller = new JScrollPane(tree);       
        //scroller.setOpaque(true);
        //tree.setBackground(new Color(217,219,226));
        scroller.setBounds(10,30,530,200);
        panel.add(scroller);
       
       
        felt = new JTextPane();
        felt.setEditable(false);
        feltScroller = new JScrollPane(felt);
        feltScroller.setBounds(10,240,530,155);
      // felt.setBackground(new Color(217,219,226));
        panel.add(feltScroller);
       
        try {
        UIManager.setLookAndFeel(  UIManager.getSystemLookAndFeelClassName() );
        }catch (Exception e) {}

     
       
       
/*     
        try {
            UIManager.setLookAndFeel(new com.sun.java.swing.plaf.motif.MotifLookAndFeel());
        }
        catch (Exception e) {}
        SwingUtilities.updateComponentTreeUI(tree.getRootPane());       
       
       
        tree.setToggleClickCount(1);

*/     
        refreshTree();
       

        tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
               
                //System.out.println(index2.get(node));
                 
                  try{ 
                    parent =  index2.get(node);
                   
                   
                    System.out.println(parent);///
                   
                    if(parent != null)
                    {
                        parentId = (Integer.parseInt((parent).toString())); 
                    } 
                  }catch(NullPointerException g){}                                                       
                             
            }
        });
        MouseListener ml = new MouseAdapter()
        {
          public void mouseClicked(MouseEvent e)
          {
               
                if(e.getClickCount() == 1 && parent !=null)
                {
       
                  felt.setText("");
                  final StyledDocument doc=(StyledDocument )felt.getDocument();
                  final MutableAttributeSet attr=new SimpleAttributeSet();
                             
                    String feltBesked="";
                    String navn="";
                    String email="";
                    java.sql.Date tid=null;

                        try{
                        //System.out.println("parent id :"+parentId);///
                        ResultSet row = sql.hentDataId(parentId);
               
                        if(row.next())
                        {
                          tid = row.getDate("tid");   
                          navn = row.getString("name");
                          email = row.getString("email");
                            feltBesked = row.getString("message");
                           
                           
                            //System.out.println(navn+" "+email+" "+feltBesked+" "+tid);////
                         
                        }
                        }catch(SQLException a){}
                     
                        try{

                        StyleConstants.setFontSize(attr,10);

                        StyleConstants.setForeground(attr,Color.black);
                       
                        StyleConstants.setFontFamily(attr,"Verdana");

                        StyleConstants.setBold(attr,true);
                        doc.insertString(doc.getLength(),feltBesked+"\n",attr);

                        StyleConstants.setBold(attr,false);

                        StyleConstants.setFontSize(attr,9);
                       

                        doc.insertString(doc.getLength(),"Skrevet af : "+navn+" "+tid+"<"+email+">"+"\n\n",attr);
                        felt.setCaretPosition(0);

                        }catch(BadLocationException b){System.out.println(b);}
                       
                        repaint();
                }

           
          }
        };       
        tree.addMouseListener(ml);       
    }
   
   
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == nyTraad) {
            traadText = new JTextArea(5,5);
            feltScroller = new JScrollPane(traadText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            navn = new JTextField();
            email = new JTextField();
            emne = new JTextField();
           
            traadText.setLineWrap(true);
           
            Object besked[] = new Object[] {
                "Navn",
                navn,
                "Email",
                email,
                "Emne",
                emne,
                "Besked",
                feltScroller};
               
                skriveFelt1.showMessageDialog(this, besked,"Lav en Tråd",JOptionPane.OK_CANCEL_OPTION);
               
                if(navn.getText().length()!=0 && email.getText().length()!=0 && emne.getText().length()!=0 && traadText.getText().length()!=0) {
                    sql.opretTraad(0,navn.getText(),email.getText(),"null",emne.getText(),traadText.getText().trim());
                    //((DefaultTreeModel)tree.getModel()).reload();
                   
                }
               
                refreshTree();
               
        }
        if(e.getSource() == svarTraad) {
           
            traadText = new JTextArea(5,5);
            feltScroller = new JScrollPane(traadText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            navn = new JTextField();
            email = new JTextField();
            emne = new JTextField();
           
            traadText.setLineWrap(true);
           
            Object besked[] = new Object[] {
                "Navn",
                navn,
                "Email",
                email,
                "Emne",
                emne,
                "Besked",
                feltScroller};
               
                skriveFelt1.showMessageDialog(this, besked,"Svar på denne tråd",JOptionPane.OK_CANCEL_OPTION);
               
                if(navn.getText().length()!=0 && email.getText().length()!=0 && emne.getText().length()!=0 && traadText.getText().length()!=0) {
                    sql.opretTraad(parentId,navn.getText(),email.getText(),"null",emne.getText(),traadText.getText().trim());
                   
                }
               
            refreshTree();
           
        }
       
    }
    public static void main(String args[]) {
        new Tree();
    }
   
    private void refreshTree()
    {
        top.removeAllChildren();
       
        try{
           
            ResultSet row = sql.hentData();
           
            int i = 0;
            while(row.next()) {
                int id = row.getInt("id");
                int overId = row.getInt("parentID");
                java.sql.Date tid = row.getDate("tid");
                String navn = row.getString("name");
                String email = row.getString("email");
                String ip = row.getString("ip");
                String traad = row.getString("subject");
                String besked = row.getString("message");
               
                DefaultMutableTreeNode svar = new DefaultMutableTreeNode(traad);
               
                if( overId == 0 )
                    top.add(svar);
                else if( overId != 0 ) {
                    node = (DefaultMutableTreeNode) index.get(""+overId);
                    node.add(svar);
                    //updater.update();
                    //treeModel.reload(node);
                    //treeModel.nodeStructureChanged(node);
                    //treeModel.reload(top);
                    //treeModel.nodeStructureChanged(top);
                }
               
                i++;
               
                index.put(""+id,svar);
                index2.put(svar,""+id);
               
            }
        }catch(SQLException e){System.out.println(e);}
       
        tree.updateUI();
        treeModel.reload();
    }
}

class MyTreeModelListener implements TreeModelListener {
    public void treeNodesChanged(TreeModelEvent e) {
       
    }
    public void treeNodesInserted(TreeModelEvent e) {
        System.out.println(e.getSource()+"hej");
       
    }
    public void treeNodesRemoved(TreeModelEvent e) {
       
    }
    public void treeStructureChanged(TreeModelEvent e) {
       
    }
}
Avatar billede jesperthomsen1980 Nybegynder
10. december 2002 - 23:32 #2
naej ikke rigtigt:-(
Avatar billede elpedro Nybegynder
11. december 2002 - 15:45 #3
LOL Aslan, jeg tror ikke du overholder min javalærers påbud om at en javaklasse max må fylde en A4 side, hehe.... Godt at se man ikke er den eneste der laver lange klasser :-)
Avatar billede magoo20000 Nybegynder
11. december 2002 - 21:12 #4
*g* Din lærer er da ikke rigtig klog ;-))
Avatar billede magoo20000 Nybegynder
11. december 2002 - 21:46 #5
Ja, du kan bruge dette:

import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreeSelectionModel;
import java.net.URL;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;

public class TreeDemo extends JFrame {
    private JEditorPane htmlPane;
    private static boolean DEBUG = false;
    private URL helpURL;

    //Optionally play with line styles.  Possible values are
    //"Angled", "Horizontal", and "None" (the default).
    private boolean playWithLineStyle = false;
    private String lineStyle = "Angled";

    public TreeDemo() {
        super("TreeDemo");

        //Create the nodes.
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series");
        createNodes(top);

        //Create a tree that allows one selection at a time.
        final JTree tree = new JTree(top);
        tree.getSelectionModel().setSelectionMode
                (TreeSelectionModel.SINGLE_TREE_SELECTION);

        //Listen for when the selection changes.
        tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                                  tree.getLastSelectedPathComponent();

                if (node == null) return;

                Object nodeInfo = node.getUserObject();
                if (node.isLeaf()) {
                    BookInfo book = (BookInfo)nodeInfo;
                    displayURL(book.bookURL);
                    if (DEBUG) {
                        System.out.print(book.bookURL + ":  \n    ");
                    }
                } else {
                    displayURL(helpURL);
                }
                if (DEBUG) {
                    System.out.println(nodeInfo.toString());
                }
            }
        });

        if (playWithLineStyle) {
            tree.putClientProperty("JTree.lineStyle", lineStyle);
        }

        //Create the scroll pane and add the tree to it.
        JScrollPane treeView = new JScrollPane(tree);

        //Create the HTML viewing pane.
        htmlPane = new JEditorPane();
        htmlPane.setEditable(false);
        initHelp();
        JScrollPane htmlView = new JScrollPane(htmlPane);

        //Add the scroll panes to a split pane.
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        splitPane.setTopComponent(treeView);
        splitPane.setBottomComponent(htmlView);

        Dimension minimumSize = new Dimension(100, 50);
        htmlView.setMinimumSize(minimumSize);
        treeView.setMinimumSize(minimumSize);
        splitPane.setDividerLocation(100);
                                     
        splitPane.setPreferredSize(new Dimension(500, 300));

        //Add the split pane to this frame.
        getContentPane().add(splitPane, BorderLayout.CENTER);
    }

    private class BookInfo {
        public String bookName;
        public URL bookURL;
        public String prefix = "file:"
                              + System.getProperty("user.dir")
                              + System.getProperty("file.separator");
        public BookInfo(String book, String filename) {
            bookName = book;
            try {
                bookURL = new URL(prefix + filename);
            } catch (java.net.MalformedURLException exc) {
                System.err.println("Attempted to create a BookInfo "
                                  + "with a bad URL: " + bookURL);
                bookURL = null;
            }
        }

        public String toString() {
            return bookName;
        }
    }

    private void initHelp() {
        String s = null;
        try {
            s = "file:"
                + System.getProperty("user.dir")
                + System.getProperty("file.separator")
                + "TreeDemoHelp.html";
            if (DEBUG) {
                System.out.println("Help URL is " + s);
            }
            helpURL = new URL(s);
            displayURL(helpURL);
        } catch (Exception e) {
            System.err.println("Couldn't create help URL: " + s);
        }
    }

    private void displayURL(URL url) {
        try {
            htmlPane.setPage(url);
        } catch (IOException e) {
            System.err.println("Attempted to read a bad URL: " + url);
        }
    }

    private void createNodes(DefaultMutableTreeNode top) {
        DefaultMutableTreeNode category = null;
        DefaultMutableTreeNode book = null;

        category = new DefaultMutableTreeNode("Books for Java Programmers");
        top.add(category);

        //original Tutorial
        book = new DefaultMutableTreeNode(new BookInfo
            ("The Java Tutorial: Object-Oriented Programming for the Internet",
            "tutorial.html"));
        category.add(book);

        //Tutorial Continued
        book = new DefaultMutableTreeNode(new BookInfo
            ("The Java Tutorial Continued: The Rest of the JDK",
            "tutorialcont.html"));
        category.add(book);

        //JFC Swing Tutorial
        book = new DefaultMutableTreeNode(new BookInfo
            ("The JFC Swing Tutorial: A Guide to Constructing GUIs",
            "swingtutorial.html"));
        category.add(book);

        //Arnold/Gosling
        book = new DefaultMutableTreeNode(new BookInfo
            ("The Java Programming Language", "arnold.html"));
        category.add(book);

        //FAQ
        book = new DefaultMutableTreeNode(new BookInfo(
            "The Java FAQ", "faq.html"));
        category.add(book);

        //Chan/Lee
        book = new DefaultMutableTreeNode(new BookInfo
            ("The Java Class Libraries: An Annotated Reference",
            "chanlee.html"));
        category.add(book);

        //Threads
        book = new DefaultMutableTreeNode(new BookInfo
            ("Concurrent Programming in Java: Design Principles and Patterns",
            "thread.html"));
        category.add(book);

        category = new DefaultMutableTreeNode("Books for Java Implementers");
        top.add(category);

        //VM
        book = new DefaultMutableTreeNode(new BookInfo
            ("The Java Virtual Machine Specification",
            "vm.html"));
        category.add(book);

        //Language Spec
        book = new DefaultMutableTreeNode(new BookInfo
            ("The Java Language Specification",
            "jls.html"));
        category.add(book);
    }

    public static void main(String[] args) {
        JFrame frame = new TreeDemo();

        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        }); 

        frame.pack();
        frame.setVisible(true);
    }
}
Avatar billede jesperthomsen1980 Nybegynder
15. december 2002 - 14:59 #6
Ja jeg har set eksemplet, men problemet er, at jeg gerne vil sifte imellem panels i stedet for at få vist HTML siderne?
Avatar billede jesperthomsen1980 Nybegynder
19. februar 2004 - 11:44 #7
Så er den lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester