swing低级应用之tree

来源:互联网 发布:最小文章cms 编辑:程序博客网 时间:2024/06/04 18:05

我不多说,直接上代码

 

package com.birdy.pms.ui;import java.util.Vector;public class Book {private String name;private String type;private long storeNumber;private Book parent;private Vector<Book> childs;public Book(){}public Book(String name,String type,long storeNumber){this.name = name;this.type = type;this.storeNumber = storeNumber;parent = null;childs = new Vector<Book>();}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}public long getStoreNumber() {return storeNumber;}public void setStoreNumber(long storeNumber) {this.storeNumber = storeNumber;}public Vector<Book> getChilds() {return childs;}public void setChilds(Vector<Book> childs) {for(int i=0;i<childs.size();i++){childs.get(i).setParent(this);}this.childs = childs;}public Book getParent() {return parent;}public void setParent(Book parent) {this.parent = parent;}public Book getChildAt(int index){return childs.get(index);}public int getIndexOfBook(Book book){return childs.indexOf(book);}public long getTotalStoreNumber(){long total = 0;if(getParent()!=null && (getChilds().size()==0)){return getStoreNumber();}if(getChilds().size()>0){for(int i=0;i<getChilds().size();i++){if(getChildAt(i).getStoreNumber()>0){total = total + getChildAt(i).getStoreNumber();}else if(getChildAt(i).getChilds().size()>0){for(int j=0;j<getChildAt(i).getChilds().size();j++){total = total + getChildAt(i).getChildAt(j).getStoreNumber();}}}}return total;}}
package com.birdy.pms.ui;import java.util.ArrayList;import java.util.List;import java.util.Vector;import javax.swing.JLabel;import javax.swing.event.TreeModelEvent;import javax.swing.event.TreeModelListener;import javax.swing.tree.TreeModel;import javax.swing.tree.TreePath;import com.birdy.pms.sample.Person;public class DemoTreeModel implements TreeModel{private boolean showAncestors;private List<Book> list = new ArrayList<Book>();private Book bookRoot;private Vector<TreeModelListener> treeModelListeners = new Vector<TreeModelListener>();public DemoTreeModel(){}public DemoTreeModel(List list){this.list = list;}public DemoTreeModel(Book bookRoot){showAncestors = false;this.bookRoot = bookRoot;} public void showAncestor(boolean b, Object newRoot) {        showAncestors = b;        Book oldRoot = (Book) newRoot;        if (newRoot != null) {        bookRoot = (Book)newRoot;        }        fireTreeStructureChanged(oldRoot);    }protected void fireTreeStructureChanged(Book oldRoot) {        int len = treeModelListeners.size();        TreeModelEvent e = new TreeModelEvent(this,                                               new Object[] {oldRoot});        for (TreeModelListener tml : treeModelListeners) {            tml.treeStructureChanged(e);        }    }@Overridepublic void addTreeModelListener(TreeModelListener l) {// TODO Auto-generated method stubtreeModelListeners.addElement(l);}@Overridepublic Object getChild(Object parent, int index) {// TODO Auto-generated method stubBook book = (Book) parent;return book.getChildAt(index);}@Overridepublic int getChildCount(Object parent) {// TODO Auto-generated method stubBook book = (Book) parent;return book.getChilds().size();}@Overridepublic int getIndexOfChild(Object parent, Object child) {// TODO Auto-generated method stubBook book = (Book) parent;return book.getIndexOfBook((Book) child);}@Overridepublic Object getRoot() {// TODO Auto-generated method stubreturn bookRoot;}@Overridepublic boolean isLeaf(Object node) {// TODO Auto-generated method stubBook book = (Book) node;return false;}@Overridepublic void removeTreeModelListener(TreeModelListener l) {// TODO Auto-generated method stub}@Overridepublic void valueForPathChanged(TreePath path, Object newValue) {// TODO Auto-generated method stub}}
package com.birdy.pms.ui;import java.awt.Component;import javax.swing.JLabel;import javax.swing.JTree;import javax.swing.tree.DefaultTreeCellRenderer;public class DemoTreeRenderer extends DefaultTreeCellRenderer{@Overridepublic Component getTreeCellRendererComponent(JTree tree, Object value,boolean sel, boolean expanded, boolean leaf, int row,boolean hasFocus) {// TODO Auto-generated method stubsuper.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,row, hasFocus);Book book = (Book) value;return new JLabel(book.getName());}}


package com.birdy.pms.ui;import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.util.ArrayList;import java.util.List;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTabbedPane;import javax.swing.JTextField;import javax.swing.JTree;import javax.swing.event.TreeModelListener;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.TreeModel;import javax.swing.tree.TreePath;import com.birdy.pms.sample.GenealogyExample;public class TreeDemo {private JFrame frame;private JTree tree;private List<Book> list = new ArrayList<Book>();private Book root;//private JLabel l1;private JTextField tf2;public TreeDemo(){init();}private void init(){root = new Book("所有文献类型","",0);Book catalog1 = new Book("A 马列主义、毛泽东思想、邓小平理论","aaaa",0);Vector<Book> v1 = new Vector<Book>();v1.add(new Book("A1 马克思、恩格斯著作","aaaa",10));v1.add(new Book("A2 列宁著作","aaaa",20));v1.add(new Book("A4 毛泽东著作","aaaaa",30));catalog1.setChilds(v1);Book catalog2 = new Book("B 哲学、宗教","bbbb",0);Vector<Book> v2 = new Vector<Book>();v2.add(new Book("B0 哲学理论","bb",10));v2.add(new Book("B1 世界哲学","bbbbbbb",20));v2.add(new Book("B2 中国哲学 ","bbb",30));catalog2.setChilds(v2);Book catalog3 = new Book("C 社会科学总论","ccc",0);Vector<Book> v3 = new Vector<Book>();v3.add(new Book("C0 社会科学理论与方法论","cc",50));v3.add(new Book("C1 社会科学现状及发展","ccccccc",60));v3.add(new Book("C2 团体、会议、社会科学机构","c",70));catalog3.setChilds(v3);Vector<Book> vRoot = new Vector<Book>();vRoot.add(catalog1);vRoot.add(catalog2);vRoot.add(catalog3);root.setChilds(vRoot);}public void createAndShowUI(){JFrame frame = new JFrame();        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        Container contentPane = frame.getContentPane();        contentPane.setLayout(new BorderLayout());                //Create and set up the content pane.                tree = new JTree(new DemoTreeModel(root));        tree.setCellRenderer(new DemoTreeRenderer());        tree.addTreeSelectionListener(new TreeSelectionListener(){@Overridepublic void valueChanged(TreeSelectionEvent e) {// TODO Auto-generated method stubBook b = (Book) e.getPath().getLastPathComponent();System.out.println(b.getName());l1.setText(b.getType());tf2.setText("馆藏数量: " + b.getTotalStoreNumber()+"");}});                JTabbedPane tabbedPane = new JTabbedPane();        l1 = new JLabel();        JPanel p1 = new JPanel();        p1.add(l1);        tabbedPane.addTab("简介", p1);                tf2 = new JTextField();        JPanel p2 = new JPanel();        p2.add(tf2);        tabbedPane.addTab("各年份馆藏数量", p2);                JPanel p3 = new JPanel();        tabbedPane.addTab("馆藏数量占比参考", p3);                contentPane.add(tree,BorderLayout.WEST);        contentPane.add(tabbedPane,BorderLayout.CENTER);                //Display the window.        frame.setPreferredSize(new Dimension(600,300));        frame.pack();        frame.setLocationRelativeTo(null);        frame.setVisible(true);}public static void main(String[] args) {TreeDemo demo = new TreeDemo();demo.createAndShowUI();}}




 

原创粉丝点击