这个我昨天刚做过,左边是一个JTree,右边是一个JPanel,当点击左边的节点时,添加一个addTreeSelectionListener监听,在valueChanged(TreeSelectionEvent e)事件里面先找到你点击的节点TreePath,然后依此添加此节点的子节点到JPanel上,我用的是添加一个个的JButton, 具体的部分代码如下: Object[] path = e.getPath().getPath(); //TreePath.getPath(),返回有序的 Objects 数组,它包含此 TreePath 的组件 String ss = ""; for (int i = 1; i < path.length; i++) { ss += File.separator + path[i].toString(); } File f = new File(ss.substring(1)); lbStatus.setText(f.toString()); String[] list = f.list(); Vector vFile = new Vector(), vDir = new Vector(); for (int i = 0; i < list.length; i++) { if ((new File(ss + File.separator + list[i])).isDirectory()) { vDir.addElement(list[i]); } else { vFile.addElement(list[i]); } } for (int i = 0; i < vDir.size(); i++) { addButton((String) (vDir.elementAt(i)), ss); } for (int i = 0; i < vFile.size(); i++) { addButton((String) (vFile.elementAt(i)), ss); }方法addButton:private void addButton(String fileName, String filePath) { JButton btt = new JButton(fileName); btt.setBorder(null); btt.setHorizontalAlignment(SwingConstants.LEFT); //设置图标和文本的水平对齐方式。 btt.setBackground(Color.white); if ((new File(filePath + File.separator + fileName)).isDirectory()) { btt.setIcon(UIManager.getIcon("Tree.closedIcon")); } else { btt.setIcon(UIManager.getIcon("Tree.leafIcon")); } filePanel.add(btt); btt.addActionListener(this); }
Panel.add(); Panel.delete(); 就能实现
用JSplitPane实现。把JTree放左面,右面放置Panel 然后点击不同的节点,右面重置panel就可以了。 package module11.event.treeselectionlistener; import java.awt.*; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; public class JSplitPane_JTree extends JFrame{ private JSplitPane jsp; private JTree jt; private WelcomePanel welcomePanel = new WelcomePanel(); private QueryPanel queryPanel = new QueryPanel();
public JSplitPane_JTree(){ initGUI(); } private void initGUI() { // TODO Auto-generated method stub this.setSize(new Dimension(400,300)); this.setTitle("JSplitPane_JTree"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = this.getContentPane(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("信用卡自助服务"); DefaultMutableTreeNode chiled1 = new DefaultMutableTreeNode("查询"); DefaultMutableTreeNode chiled2 = new DefaultMutableTreeNode("存款"); DefaultMutableTreeNode chiled3 = new DefaultMutableTreeNode("取款"); root.add(chiled1); root.add(chiled2); root.add(chiled3);
jt = new JTree(root); jt.addTreeSelectionListener( new MyTreeSelectionListener()); jsp = new JSplitPane(); jsp.setDividerLocation(100); jsp.add(jt,JSplitPane.LEFT); jsp.add(welcomePanel,JSplitPane.RIGHT); c.add(jsp); }
class MyTreeSelectionListener implements TreeSelectionListener{ public void valueChanged(TreeSelectionEvent arg0) { // TODO Auto-generated method stub String node = jt.getLastSelectedPathComponent() .toString(); if(node.equals("查询")){ jsp.remove(jsp.getRightComponent()); jsp.add(queryPanel,JSplitPane.RIGHT); }else{ jsp.remove(jsp.getRightComponent()); jsp.add(welcomePanel,JSplitPane.RIGHT); } }
然后每次点击不同的JTree,对右边有显示时,右边的Panel是先删掉(旧的),在添加新的Panel上去。不会覆盖掉
具体的部分代码如下:
Object[] path = e.getPath().getPath(); //TreePath.getPath(),返回有序的 Objects 数组,它包含此 TreePath 的组件
String ss = "";
for (int i = 1; i < path.length; i++) {
ss += File.separator + path[i].toString();
}
File f = new File(ss.substring(1));
lbStatus.setText(f.toString());
String[] list = f.list();
Vector vFile = new Vector(), vDir = new Vector();
for (int i = 0; i < list.length; i++) {
if ((new File(ss + File.separator + list[i])).isDirectory()) {
vDir.addElement(list[i]);
} else {
vFile.addElement(list[i]);
}
}
for (int i = 0; i < vDir.size(); i++) {
addButton((String) (vDir.elementAt(i)), ss);
}
for (int i = 0; i < vFile.size(); i++) {
addButton((String) (vFile.elementAt(i)), ss);
}方法addButton:private void addButton(String fileName, String filePath) {
JButton btt = new JButton(fileName);
btt.setBorder(null);
btt.setHorizontalAlignment(SwingConstants.LEFT); //设置图标和文本的水平对齐方式。
btt.setBackground(Color.white);
if ((new File(filePath + File.separator + fileName)).isDirectory()) {
btt.setIcon(UIManager.getIcon("Tree.closedIcon"));
} else {
btt.setIcon(UIManager.getIcon("Tree.leafIcon"));
}
filePanel.add(btt);
btt.addActionListener(this);
}
Panel.delete();
就能实现
package module11.event.treeselectionlistener;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
public class JSplitPane_JTree extends JFrame{
private JSplitPane jsp;
private JTree jt;
private WelcomePanel welcomePanel
= new WelcomePanel();
private QueryPanel queryPanel
= new QueryPanel();
public JSplitPane_JTree(){
initGUI();
}
private void initGUI() {
// TODO Auto-generated method stub
this.setSize(new Dimension(400,300));
this.setTitle("JSplitPane_JTree");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = this.getContentPane();
DefaultMutableTreeNode root =
new DefaultMutableTreeNode("信用卡自助服务");
DefaultMutableTreeNode chiled1 =
new DefaultMutableTreeNode("查询");
DefaultMutableTreeNode chiled2 =
new DefaultMutableTreeNode("存款");
DefaultMutableTreeNode chiled3 =
new DefaultMutableTreeNode("取款");
root.add(chiled1);
root.add(chiled2);
root.add(chiled3);
jt = new JTree(root);
jt.addTreeSelectionListener(
new MyTreeSelectionListener());
jsp = new JSplitPane();
jsp.setDividerLocation(100);
jsp.add(jt,JSplitPane.LEFT);
jsp.add(welcomePanel,JSplitPane.RIGHT);
c.add(jsp);
}
class MyTreeSelectionListener implements TreeSelectionListener{ public void valueChanged(TreeSelectionEvent arg0) {
// TODO Auto-generated method stub
String node = jt.getLastSelectedPathComponent()
.toString();
if(node.equals("查询")){
jsp.remove(jsp.getRightComponent());
jsp.add(queryPanel,JSplitPane.RIGHT);
}else{
jsp.remove(jsp.getRightComponent());
jsp.add(welcomePanel,JSplitPane.RIGHT);
}
}
}
}
package module11.event.treeselectionlistener;
import java.awt.*;
import javax.swing.*;
public class JSplitPane_JTreeTest { /**
* @param args
* @throws UnsupportedLookAndFeelException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
// TODO Auto-generated method stub
UIManager.setLookAndFeel(
UIManager.
getSystemLookAndFeelClassName());
JSplitPane_JTree frame =
new JSplitPane_JTree();
frame.setVisible(true);
}}
你可以试下是不是这种效果?