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日

最近浏览