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(" "); 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日