请问高手们:我现在有一个frame已经显示出来,当点击其中一个panel中的jtree的节点,触发事件后,我想在一个其中的另一个panel里显示该panel下的子节点,但是却怎么也显示不出来,是不是刷新有问题还是什么其它的原因?请大家多多指教。

解决方案 »

  1.   

    估计不是刷新问题,你先在jtree的事件处理代码中看看有没有选取了有效的对象。
      

  2.   

    你可以使用回调函数来实现,假如你主界面的程序叫MainFrame.java,然后要弹出的那个窗口是另外一个文件,这时你定义一个接口interface CallBackInterface,然后主程序实现这个接口,当弹出的那个窗口数据处理完毕后,想在主窗口中显示时,你就调用那个接口中的方法,此时主程序就会收到通知,然后在主程序的接口函数中填写显示代码就可以了,给你提供一个我自己写的一个小例子吧(也可以用Observer模式实现,还没研究通):
    //Test.java
    package testcallback;import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.border.*;public class Test extends JFrame implements MyCallBackInterface{
      JPanel contentPane = new JPanel();
      JButton loginButton = new JButton();
      JTextArea resultArea = new JTextArea();
      TitledBorder titledBorder1;
      TitledBorder titledBorder2;
      LoginPanel panel = new LoginPanel(this);
      public Test() {
        titledBorder1 = new TitledBorder("结果显示窗口");
        loginButton.setBounds(new Rectangle(139, 45, 105, 38));
        loginButton.setText("Login");
        loginButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
              //panel = new LoginPanel();
              panel.setTitle("LoginPanel");
              panel.setBounds(100,100,300,300);
              panel.setVisible(true);
            }
        });
        contentPane.setLayout(null);
        resultArea.setBorder(titledBorder1);
        resultArea.setBounds(new Rectangle(72, 111, 274, 151));
        contentPane.add(loginButton, null);
        contentPane.add(resultArea, null);
        getContentPane().add(contentPane);
      }
      //程序调用的函数已经完成
      public void EventIsCompleted(){
        String Myresult = panel.usrResult;
        resultArea.append(Myresult);
      }  public void EventIsDoing(){
        String echo = panel.usrCommand;
        resultArea.append(echo);
      }  public static void main(String[] args){
        JFrame web = new WebCDP();
        web.setTitle("测试函数回调");
        web.setBounds(100,100,420,320);
        web.setVisible(true);
      }
    }//接口函数
    package testcallback;public interface MyCallBackInterface {
      public void EventIsDoing();
      public void EventIsCompleted();
    }
    //loginPanel.java
    package testcallback;import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.border.*;public class LoginPanel extends JFrame{
      JPanel loginPanel = new JPanel();
      TitledBorder titledBorder1;
      JLabel nameLabel = new JLabel();
      TitledBorder titledBorder2;
      JTextField nameField = new JTextField();
      JLabel pwdLabel = new JLabel();
      JPasswordField pwdField = new JPasswordField();
      JButton connectButton = new JButton();
      JButton cancelButton = new JButton();
      public String usrCommand;
      public String usrResult;
      private MyCallBackInterface ie;
      public LoginPanel(MyCallBackInterface event) {
        this.ie = event;
        titledBorder2 = new TitledBorder("用户登陆窗口");
        nameLabel.setVerifyInputWhenFocusTarget(true);
        nameLabel.setText("用户名");
        nameLabel.setBounds(new Rectangle(53, 48, 44, 27));
        loginPanel.setBorder(titledBorder2);
        loginPanel.setPreferredSize(new Dimension(10, 10));
        loginPanel.setLayout(null);
        nameField.setText("");
        nameField.setBounds(new Rectangle(104, 49, 166, 23));
        pwdLabel.setRequestFocusEnabled(true);
        pwdLabel.setText("密    码");
        pwdLabel.setBounds(new Rectangle(53, 87, 38, 21));
        pwdField.setText("");
        pwdField.setBounds(new Rectangle(106, 87, 166, 24));
        connectButton.setBounds(new Rectangle(72, 141, 90, 28));
        connectButton.setText("连接");
        connectButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent connectEvent){
            connect();
          }
        });
        cancelButton.setBounds(new Rectangle(179, 139, 94, 31));
        cancelButton.setText("关闭");
        cancelButton.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent cancelEvent){
            cancel();
          }
        });
        loginPanel.add(nameLabel, null);
        loginPanel.add(nameField, null);
        loginPanel.add(pwdLabel, null);
        loginPanel.add(pwdField, null);
        loginPanel.add(connectButton, null);
        loginPanel.add(cancelButton, null);
        getContentPane().add(loginPanel);
      }  public void connect(){
        String usrName = nameField.getText().trim();
        String pwd = new String(pwdField.getPassword()).trim();
        usrCommand = new String("用户发送的命令是:login"+usrName+pwd+"\n");
        ie.EventIsDoing();
        System.out.println("系统正在运行");
        //此处可以填写连接处理代码
        System.out.println("处理已经完成");
        usrResult = new String("这是返回的结果");
        ie.EventIsCompleted();
      }  public void cancel(){
        this.dispose();
      }
    }
      

  3.   

    查一些有关观察者模式方面的资料。这样做起来就容易一些。
    参考文章:
    http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=17027