为什么用JTree生成的数中单击子节点不会响应事件?
我的程序如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*; class Mtree extends JFrame implements TreeSelectionListener
{     JTree tree=null;
  JPanel p=null;
  JButton button;
Mtree(String s)
{ super(s);
Container con=this.getContentPane();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("主业务功能");
DefaultMutableTreeNode t1=new DefaultMutableTreeNode("账户管理");
DefaultMutableTreeNode t2=new DefaultMutableTreeNode("事物查询");
DefaultMutableTreeNode t3=new DefaultMutableTreeNode("用户存款");
DefaultMutableTreeNode t4=new DefaultMutableTreeNode("用户取款");
DefaultMutableTreeNode t5=new DefaultMutableTreeNode("数据维护");
DefaultMutableTreeNode t6=new DefaultMutableTreeNode("系统表查看");
DefaultMutableTreeNode t7=new DefaultMutableTreeNode("系统账户管理");
DefaultMutableTreeNode t8=new DefaultMutableTreeNode("退出系统");

DefaultMutableTreeNode t1_1=new DefaultMutableTreeNode("新用户开户");
DefaultMutableTreeNode t1_2=new DefaultMutableTreeNode("用户资料明细");
DefaultMutableTreeNode t1_3=new DefaultMutableTreeNode("账户密码修改");
DefaultMutableTreeNode t2_1=new DefaultMutableTreeNode("账户金额查询");
DefaultMutableTreeNode t2_2=new DefaultMutableTreeNode("交易记录查询");
DefaultMutableTreeNode t2_3=new DefaultMutableTreeNode("账户信息查询");
DefaultMutableTreeNode t5_1=new DefaultMutableTreeNode("数据导出");
DefaultMutableTreeNode t5_2=new DefaultMutableTreeNode("数据导入");
DefaultMutableTreeNode t7_1=new DefaultMutableTreeNode("添加管理员账户");
DefaultMutableTreeNode t7_2=new DefaultMutableTreeNode("管理员密码修改");
root.add(t1);root.add(t2);root.add(t3);root.add(t4);
root.add(t5);root.add(t6);root.add(t7);root.add(t8);
t1.add(t1_1);t1.add(t1_2);t1.add(t1_3);
t2.add(t2_1);t2.add(t2_2);t2.add(t2_3);
t5.add(t5_1);t5.add(t5_2);t7.add(t7_1);t7.add(t7_2);
JTree tree= new JTree(root);
JScrollPane panel = new JScrollPane(p=new JPanel());
JSplitPane splitpane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,tree,panel);

        con.add(splitpane);
        tree.addTreeSelectionListener(this);
        System.out.println(tree);
        this.validate();  

addWindowListener(new WindowAdapter(){  
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.setBounds(80, 60, 800, 600);  
this.setVisible(true); 
System.out.println("333");
}
public void valueChanged(TreeSelectionEvent e)
{ // TODO 自动生成方法存根
System.out.println("444");
if(e.getSource()==tree)//这里似乎无法获得事件源
{ String str=null;
System.out.println("555");
System.out.println(str);
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(node.isLeaf())
{
str=node.toString();
System.out.println(str);
if(str.equals("新用户开户"))
{System.out.println("新用户开户");}
else if(str.equals("用户资料明细"))
{System.out.println("用户资料明细");}
else if(str.equals("账户金额查询"))
{System.out.println("账户金额查询");}
else if(str.equals("交易记录查询"))
{System.out.println("交易记录查询");}
else if(str.equals("账户信息查询"))
{System.out.println("账户信息查询");}
else if(str.equals("数据导出"))
{System.out.println("数据导出");}
else if(str.equals("数据导入"))
{System.out.println("数据导入");}
else if(str.equals("用户存款"))
{System.out.println("用户存款");}
else if(str.equals("退出系统"))
{System.out.println("退出系统");}
else if(str.equals("系统表查看"))
{System.out.println("系统表查看");}
else if(str.equals("用户取款"))
{System.out.println("用户取款");}
}
else
{System.out.println("ERROR");} }
else{System.out.println("oooooo");}
}
}
public class 主窗体
{
public static void main(String args[])
{
//MTree win=new MTree("- 。-");
//win.pack();
new MTree("- 。-");
}
}
我没学过JAVA,但老师要求用JAVA来做。我也只好边做边学了。为什么我的这个程序生成的框架中 ,单击左边的树形菜单中的子节点无法
看到System.out.println("  ")语句输出的内容?请高手和版主指点,本人
先谢了哈。还有就是如何在右边升成的P(Panel)中添加不同的界面?在单击左边不同的子节点时,右边的界面可以切换 。请大狭给点思路。

解决方案 »

  1.   

    JTree tree= new JTree(root);
    换成
    tree= new JTree(root);
      

  2.   

    是不是选择未被选中的节点可以输出,
    换成鼠标事件试一下吧
    关于panel 可以把不同的界面都做成panel
    然后在右边的panel中 remove(old) 然后再add(new) 进去
      

  3.   

    还有就是如何在右边升成的P(Panel)中添加不同的界面?在单击左边不同的子节点时,右边的界面可以切换
    ===
    试一下CardLayout布局
      

  4.   

    CrazyGou(阿狗)(...) 
    JTree tree= new JTree(root);
    换成
    tree= new JTree(root);搞定  太粗心了哈 
      

  5.   

    还有就是如何在右边升成的P(Panel)中添加不同的界面?在单击左边不同的子节点时,右边的界面可以切换
    ===
    试一下CardLayout布局
             
       我用CardLayout布局试了测试不成功 。
      

  6.   

    这是我写的测试程序:
    错误:
    htmmp
    Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string
    at java.awt.CardLayout.addLayoutComponent(CardLayout.java:190)
    at java.awt.Container.addImpl(Container.java:1058)
    at java.awt.Container.add(Container.java:351)
    at exw.<init>(ex.java:36)
    at ex.main(ex.java:75)
    程序代码:
    import java.awt.*;
    import java.awt.event.*;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     class exw extends JFrame implements ActionListener
    {
    CardLayout my;
    JButton b1,b2,b3;
    JPanel p,p1;
    ChangePass_SYS p2,p4;Changepass p3;


    exw()
    {   Container con=this.getContentPane();
        

        my=new CardLayout();
    con.setLayout(new BorderLayout());
    p1=new JPanel();
    b1=new JButton("上");
    b2=new JButton("中");
    b3=new JButton("下");
    p1.add(b1);p1.add(b2);p1.add(b3);
    b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);

    p=new JPanel();
    p.setLayout(my);
    p2=new ChangePass_SYS();//这个是用panel做的界面,测试过了没问题
    p3=new Changepass();//同上
    p4=new ChangePass_SYS();
    p.add(p2);p.add(p3);p.add(p4);//ex.java:36

    con.add(p,BorderLayout.CENTER);con.add(p2,BorderLayout.SOUTH);

    this.validate();      //让你加的组件刷新到窗口
    this.addWindowListener(new WindowAdapter(){    //添加窗口事件响应,以便能关掉窗口
    public void windowClosing(WindowEvent e){
    System.exit(0);
    }
    });
    this.setBounds(200, 300, 600, 600);  //设置窗口大小
    this.setVisible(true);             //设置窗口的可视化,以便能看得见

    }
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==b1)
    {
    my.first(p);
    }
    else if(e.getSource()==b2)
    {
    my.next(p);
    }
    else if(e.getSource()==b3)
    {
    my.last(p);
    }
    }
    }
    public class ex
    {
    public static void main(String args[])
    {
    // @SuppressWarnings("unused")
    System.out.println("htmmp");
    //Win w=new Win("login");
    new exw();//ex.java:75
    }
    }不知道是不是我程序的问题。
      

  7.   

    p.add(p2);
    p.add(p3);
    p.add(p4);
    换成
    my.addLayoutComponent(p2, "p2");
    my.addLayoutComponent(p3, "p3");
    my.addLayoutComponent(p4, "p4");