Java桌面程序,左边是树,点击不同节点显示不同内容,怎么做到?

xuzhujun728 2009-07-03 08:21:26
Java桌面程序,左边是树——我用的是JTree,点击不同节点在树的右边显示不同内容,怎么做到?请知道的务必帮帮忙,谢谢!!!
...全文
268 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjny520 2009-07-07
  • 打赏
  • 举报
回复
七楼的welcomePanel 是什么??
QuickPai 2009-07-04
  • 打赏
  • 举报
回复
这个我昨天刚做过,左边是一个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);
}
小宝z 2009-07-04
  • 打赏
  • 举报
回复
用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);
}
}

}
}


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);
}

}


你可以试下是不是这种效果?
smqasx 2009-07-04
  • 打赏
  • 举报
回复
Panel.add();
Panel.delete();
就能实现
LazyCat2222 2009-07-03
  • 打赏
  • 举报
回复
你那边面板可以用JLayoutPanel,他是以一个层显示的。

在点击树触发事件的时候,是对右边的相应显示不同内容吧,那你是不同面板显示吧,那就新创建一个面板来显示数据了
然后每次点击不同的JTree,对右边有显示时,右边的Panel是先删掉(旧的),在添加新的Panel上去。不会覆盖掉。。。
xuzhujun728 2009-07-03
  • 打赏
  • 举报
回复
我的意思是,怎么做到点击不同的节点时显示不同的面板?我是不是应该把多个面板叠在一起?还是别的做法?
kulatasana 2009-07-03
  • 打赏
  • 举报
回复
监听树节点选中事件...
kitten7985 2009-07-03
  • 打赏
  • 举报
回复
我一般按2楼的做法做这件事

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧