问题描述:实现将一个窗口分为两个部分,左边是功能树,就像CSDN的功能树那样,右边是根据所选节点调用相应的4GL程序并显示其界面在树的右边.我写的功能树如下,可是不知道怎么具体实现前面所述的功能,请各位大侠帮忙,以前从来没做GUI方面的东西,先谢过各位了.我的功能树的代码:import javax.swing.*;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.util.*;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FunctionTree extends JApplet{
Hashtable ht1 = new Hashtable();
Vector menu11 = new Vector();  //  @jve:decl-index=0:
Vector menu12 = new Vector();  //  @jve:decl-index=0:
Vector menu13 = new Vector();
Vector menu14 = new Vector();
Vector menu15 = new Vector();
Vector menu16 = new Vector();
Object[] objs = new Object[]{"array item1","array item2","array item3"};
private JFrame DisplayFrame = null;  //  @jve:decl-index=0:visual-constraint="160,114"
private JPanel DisplayPane = null;
public void init(){
Container contentPane = getContentPane();

menu11.addElement("Item Mster");
menu11.addElement("Zone Master");
menu11.addElement("Location Master");
menu11.addElement("Receipt Master");
menu11.addElement("Employee Master");
menu11.addElement("Work Order Master");
menu11.addElement("Department Master");

menu12.addElement("Item");
menu12.addElement("Inventory");
menu12.addElement("Location");

ht1.put("Master Files", menu11);
ht1.put("Inquery Menu", menu12);
ht1.put("Quality Control", menu13);
ht1.put("Inventory Detail", menu14);
ht1.put("Cycle Counts", menu15);
ht1.put("Reports", menu16);


JTree hashTree = new JTree(ht1);

JScrollPane hashPane =new JScrollPane(hashTree);

hashPane.setPreferredSize(new Dimension(500,500));

hashPane.setBorder(BorderFactory.createTitledBorder("Menu"));

hashTree.expandPath(new TreePath(hashTree.getModel().getRoot()));
contentPane.setLayout(new FlowLayout());
contentPane.add(hashPane);

}
}

解决方案 »

  1.   

    左边是树,右边设为cardlayout布局
    根据树节点显示相应的页面就行了
      

  2.   

    我就做了一个这样的东西,不过比你说的要重杂的多如果你的树的结点都是固定的,那么就用观察者模式. 
    如果树结点是动态的最好不要用观察者,因为你不一定知道要观察谁.以观察者为例,大体说一下:
    将一个JSplitPane设为JFrame的容器,JSplitPane的左边为树,右边为视图组件,左右两边的组件都要放在JScrollPane中
    让右边框里的显示视图的方法监听树的选择结点事件.Java的UI非常重杂,一般来说都遵循MVC的架框,有可能一个看似简单的组件也要写一大堆代码.
    朋友你要心理准备.
      

  3.   

    谢谢AFer198215(甜咖啡),你能把你写的那个东东共享给我参考一下么.以前从来没写过GUI,感觉无从下手,如果方便的话发到我,先谢谢你了.
      

  4.   

    谢谢AFer198215(甜咖啡),你能把你写的那个东东共享给我参考一下么.以前从来没写过GUI,感觉无从下手,如果方便的话发到我,先谢谢你了.
    ------------------------
    当然---------不可以了. 那是公司项目.
      

  5.   

    public class MySplitPane extends JSplitPane{ public ICPSplitPane(int newOrientation, int defaultWidth, JComponent firstComp, JComponent secondComp){
    super(newOrientation);
    setContinuousLayout(true);
    setOneTouchExpandable(true);
    setDividerLocation(defaultWidth);

    if(newOrientation == JSplitPane.HORIZONTAL_SPLIT){
    this.setLeftComponent(firstComp);
    this.setRightComponent(secondComp);
    }else if (newOrientation == JSplitPane.VERTICAL_SPLIT){
    this.setTopComponent(firstComp);
    this.setBottomComponent(secondComp);
    }
    }
    }
    ...
    MyTree tree = new MyTree();
    MyTable table = new MyTable();
    ICPSplitPane splitPane = new (JSplitPane.HORIZONTAL_SPLIT, tree, table);
    ...//事件
    tree.addItemListener(new ItemListener(){   ....
    Object obj = tree.getSelected()
    table.refresh(obj);
    });