package com.test;



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
import javax.swing.UIManager;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;




public class CitytreeView  extends JFrame {

private static final long serialVersionUID = 1L;

public static final ImageIcon ICON_COMPUTER =  new ImageIcon(CitytreeView.class.getResource("/com/test/tree1.png"));
public static final ImageIcon ICON_DISK = ICON_COMPUTER;
public static final ImageIcon ICON_FOLDER =   ICON_DISK;
public static final ImageIcon ICON_EXPANDEDFOLDER =  ICON_FOLDER;

protected JTree  m_tree;
protected DefaultTreeModel m_model;

AddCheckBoxToTree AddCh = new AddCheckBoxToTree();

private AddCheckBoxToTree.CheckTreeManager checkTreeManager;



protected TreePath m_clickedPath;

private MyDefaultTreeModel top;
private static Map<String, String> cityMap=new HashMap<String, String>();

private static void loadCityFromFile(){
	   try{
		System.out.println(  );
	 FileInputStream fis=new FileInputStream( System.getProperty("user.dir")+File.separator+"config"+File.separator+"city");
 InputStreamReader isr=new InputStreamReader(fis);
 BufferedReader br=new BufferedReader(isr);
 String str;
 while((str=br.readLine())!=null){
     String []s=str.split("&nbsp");
  if(cityMap.containsKey(s[0])){
 	 cityMap.put(s[0], cityMap.get(s[0])+"=="+s[1]);
  }
  else 
 	 cityMap.put(s[0], s[1]);
 }
 br.close();
 isr.close();
 fis.close();
}
	   catch (Exception e) {
		// TODO: handle exception
	}
}

private void addRootNode(    DefaultMutableTreeNode top){
    Set<String> ks=cityMap.keySet();
    Iterator<String> it= ks.iterator();
    MyDefaultTreeModel node;
	int i=1;
    while(it.hasNext()){
    
 	     node = new MyDefaultTreeModel(new IconData(ICON_DISK, null, it.next()));
 	    node.setTreeId(i+++"");
 	     node.add(new MyDefaultTreeModel( new Boolean(false) ));
 	     top.add(node);
    }
}
/**
 * 获取选中的节点
 * @return
 */
private List<String> getSelectedPaths(JTree tree){

	
	
TreeSelectionModel s=tree.getSelectionModel();

	return null;
	
	
}
public CitytreeView()
{
    super("Demo tree check box");
    setSize(400, 415);
    
    loadCityFromFile();

     top = new MyDefaultTreeModel(
            new IconData(ICON_COMPUTER, null, "城市列表"));

    DefaultMutableTreeNode node;
    
    addRootNode(top);
/*    for (int k=0; k<roots.length; k++)
    {
        node = new DefaultMutableTreeNode(new IconData(ICON_DISK, null, new FileNode(roots[k])));
        top.add(node);
        node.add(new DefaultMutableTreeNode( new Boolean(true) ));
    }
*/
    m_model = new DefaultTreeModel(top);

    m_tree = new JTree(m_model){
        public String getToolTipText(MouseEvent ev) 
        {
        	
            if(ev == null)
                return null;
            TreePath path = m_tree.getPathForLocation(ev.getX(), 
                    ev.getY());
          
            return null;
        }
    };

    ToolTipManager.sharedInstance().registerComponent(m_tree);

    m_tree.putClientProperty("JTree.lineStyle", "Angled");

    TreeCellRenderer renderer = new IconCellRenderer();
    m_tree.setCellRenderer(renderer);

    m_tree.addTreeExpansionListener(new  DirExpansionListener());

    m_tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 
    m_tree.setShowsRootHandles(true); 
    m_tree.setEditable(false);


    checkTreeManager = AddCh.new CheckTreeManager(m_tree, null);

 JButton bt=new JButton("获取选中的数据");
 bt.setBounds(200, 200, 100, 50);
// setLayout(null);
 getContentPane().add(bt);
 bt.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		JOptionPane.showMessageDialog(null, checkTreeManager.getSelectionModel().getSelectedNodes(""));
		}
		
});
 
 

    JScrollPane s = new JScrollPane();
    s.setViewportView(m_tree);
    getContentPane().add(s, BorderLayout.CENTER);


    WindowListener wndCloser = new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
    };

    addWindowListener(wndCloser);

    setVisible(true);
}
/**
 * 加载城市列表
 */
private  String[] loadCityList(String key){
	if(null!=cityMap.get(key))
	return  cityMap.get(key).split("==");
	return null;
	
}

private List<DefaultMutableTreeNode> boxList=new ArrayList<DefaultMutableTreeNode>();//定义一个checkbox集合用来存放checkbox
private List<DefaultMutableTreeNode> nodeList=new ArrayList<DefaultMutableTreeNode>();//定义一个node集合用来存放

private void addNodes(String[]city_list,DefaultMutableTreeNode node){
	  //String []cityList=loadCityList(node.)
    for(String ct:city_list){
    	MyDefaultTreeModel    n = new MyDefaultTreeModel(new IconData(ICON_DISK, null,ct));
    	n.setTreeId("123");
	     n.add(new DefaultMutableTreeNode( new Boolean(false) ));
	     node.add(n);
	   
  
    }
}

/**
 * 
 * @param city_list
 * @param node
 * @param addBox
 */
private void addNodes(String[]city_list,DefaultMutableTreeNode node,boolean addBox){
	  //String []cityList=loadCityList(node.)
  for(String ct:city_list){
	  MyDefaultTreeModel    n = new MyDefaultTreeModel(new IconData(ICON_DISK, null,ct));
	     n.add(new MyDefaultTreeModel( new Boolean(false) ));
   	n.setTreeId("123");
  	
	     node.add(n);
	   

  }
}
MyDefaultTreeModel getTreeNode(TreePath path)
{
    return (MyDefaultTreeModel)(path.getLastPathComponent());
}


public AddCheckBoxToTree.CheckTreeManager getCheckTreeManager() {
    return checkTreeManager;
}

// Make sure expansion is threaded and updating the tree model
// only occurs within the event dispatching thread.
class DirExpansionListener implements TreeExpansionListener
{
    public void treeExpanded(TreeExpansionEvent event)
    {
        final MyDefaultTreeModel node = getTreeNode(
                event.getPath());
        if(node.getLevel()==0)
        {node.removeAllChildren();
        	addRootNode(node);
            new Th(node).start();
            return;
        }
      
     String  city_name=event.getPath().getLastPathComponent().toString();
     node.removeAllChildren();
     String []city_list=loadCityList(city_name);
     if(null==city_list||node.getLevel()==2){
    	 node.removeAllChildren();
    //	 node.setUserObject(userObject)
    	 m_model.reload(node);;
    	 return;
     }
     addNodes(city_list, node,false);
      

       new Th(node).start();
    }

    public void treeCollapsed(TreeExpansionEvent event) {}
}



class Th extends Thread{
	
	public DefaultMutableTreeNode node;
	public Th(DefaultMutableTreeNode node){
		
		this.node=node;
	}
	 public void run() 
     {
         {
             Runnable runnable = new Runnable() 
             {
                 public void run() 
                 {
                 	
                 	
                 	m_model.reload(node);
                    
                 }
             };
             SwingUtilities.invokeLater(runnable);
         }
     }
}

public static void main(String argv[]) 
{
    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (Exception evt) {}
    new CitytreeView();
}
}

class IconCellRenderer1 extends JLabel implements TreeCellRenderer{
protected Color m_textSelectionColor;
protected Color m_textNonSelectionColor;
protected Color m_bkSelectionColor;
protected Color m_bkNonSelectionColor;
protected Color m_borderSelectionColor;

protected boolean m_selected;

public IconCellRenderer1()
{
    super();
    m_textSelectionColor = UIManager.getColor(
            "Tree.selectionForeground");
    m_textNonSelectionColor = UIManager.getColor(
            "Tree.textForeground");
    m_bkSelectionColor = UIManager.getColor(
            "Tree.selectionBackground");
    m_bkNonSelectionColor = UIManager.getColor(
            "Tree.textBackground");
    m_borderSelectionColor = UIManager.getColor(
            "Tree.selectionBorderColor");
    setOpaque(false);
}

public Component getTreeCellRendererComponent(JTree tree, 
        Object value, boolean sel, boolean expanded, boolean leaf, 
        int row, boolean hasFocus) 

{
    DefaultMutableTreeNode node = 
            (DefaultMutableTreeNode)value;
    Object obj = node.getUserObject();
    setText(obj.toString());

    if (obj instanceof Boolean)
        setText("Retrieving data...");

    if (obj instanceof IconData)
    {
        IconData idata = (IconData)obj;
        if (expanded)
            setIcon(idata.getExpandedIcon());
        else
            setIcon(idata.getIcon());
    }
    else
        setIcon(null);

    setFont(tree.getFont());
    setForeground(sel ? m_textSelectionColor : 
        m_textNonSelectionColor);
    setBackground(sel ? m_bkSelectionColor : 
        m_bkNonSelectionColor);
    m_selected = sel;
    return this;
}

public void paintComponent(Graphics g) 
{
    Color bColor = getBackground();
    Icon icon = getIcon();

    g.setColor(bColor);
    int offset = 0;
    if(icon != null && getText() != null) 
        offset = (icon.getIconWidth() + getIconTextGap());
    g.fillRect(offset, 0, getWidth() - 1 - offset,
            getHeight() - 1);

    if (m_selected) 
    {
        g.setColor(m_borderSelectionColor);
        g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
    }

    super.paintComponent(g);
}
}


class IconData{
protected Icon   m_icon;
protected Icon   m_expandedIcon;
protected Object m_data;

public IconData(Icon icon, Object data)
{
    m_icon = icon;
    m_expandedIcon = null;
    m_data = data;
}

public IconData(Icon icon, Icon expandedIcon, Object data)
{
    m_icon = icon;
    m_expandedIcon = expandedIcon;
    m_data = data;
}

public Icon getIcon() 
{ 
    return m_icon;
}

public Icon getExpandedIcon() 
{ 
    return m_expandedIcon!=null ? m_expandedIcon : m_icon;
}

public Object getObject() 
{ 
    return m_data;
}

public String toString() 
{ 
    return m_data.toString();
}
}
class IconCellRenderer extends JLabel implements TreeCellRenderer{
	protected Color m_textSelectionColor;
	protected Color m_textNonSelectionColor;
	protected Color m_bkSelectionColor;
	protected Color m_bkNonSelectionColor;
	protected Color m_borderSelectionColor;

	protected boolean m_selected;

	public IconCellRenderer()
	{
	    super();
	    m_textSelectionColor = UIManager.getColor(
	            "Tree.selectionForeground");
	    m_textNonSelectionColor = UIManager.getColor(
	            "Tree.textForeground");
	    m_bkSelectionColor = UIManager.getColor(
	            "Tree.selectionBackground");
	    m_bkNonSelectionColor = UIManager.getColor(
	            "Tree.textBackground");
	    m_borderSelectionColor = UIManager.getColor(
	            "Tree.selectionBorderColor");
	    setOpaque(false);
	}

	public Component getTreeCellRendererComponent(JTree tree, 
	        Object value, boolean sel, boolean expanded, boolean leaf, 
	        int row, boolean hasFocus) 

	{
	    DefaultMutableTreeNode node = 
	            (DefaultMutableTreeNode)value;
	    Object obj = node.getUserObject();
	    setText(obj.toString());
/*
	    if (obj instanceof Boolean)
	        setText("Retrieving data...");
*/
	    if (obj instanceof IconData)
	    {
	        IconData idata = (IconData)obj;
	        if (expanded)
	            setIcon(idata.getExpandedIcon());
	        else
	            setIcon(idata.getIcon());
	    }
	    else
	        setIcon(null);
	    setFont(tree.getFont());
	    setForeground(sel ? m_textSelectionColor : 
	        m_textNonSelectionColor);
	    setBackground(sel ? m_bkSelectionColor : 
	        m_bkNonSelectionColor);
	    m_selected = sel;
	    return this;
	}

	public void paintComponent(Graphics g) 
	{
	    Color bColor = getBackground();
	    Icon icon = getIcon();

	    g.setColor(bColor);
	    int offset = 0;
	    if(icon != null && getText() != null) 
	        offset = (icon.getIconWidth() + getIconTextGap());
	    g.fillRect(offset, 0, getWidth() - 1 - offset,
	            getHeight() - 1);

	    if (m_selected) 
	    {
	        g.setColor(m_borderSelectionColor);
	        g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);
	    }

	    super.paintComponent(g);
	}
	}
最近下载更多
sckj_01  LV1 2023年5月2日
512816870  LV2 2022年9月8日
hg2370634854  LV2 2022年4月11日
antiwise  LV1 2022年1月10日
the_teenagers  LV1 2021年7月20日
有人ʰ 2021年7月15日
暂无贡献等级
zxc12188  LV1 2021年6月15日
zhu9527  LV2 2021年5月31日
李先生很好。  LV1 2021年3月27日
lizhenlinok  LV10 2021年1月11日
最近浏览更多
754210352  LV1 3月26日
辰槿de星星  LV2 2023年11月10日
漫步的海星  LV4 2023年8月28日
sckj_01  LV1 2023年5月2日
512816870  LV2 2022年9月8日
hg2370634854  LV2 2022年4月11日
微信网友_5852742079762432  LV6 2022年3月5日
一起吹过晚风的街  LV1 2022年1月17日
antiwise  LV1 2022年1月10日
aaaahao  LV13 2021年8月26日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友