请问jtree中该如何去刷新? 请问高手们:我现在有一个frame已经显示出来,当点击其中一个panel中的jtree的节点,触发事件后,我想在一个其中的另一个panel里显示该panel下的子节点,但是却怎么也显示不出来,是不是刷新有问题还是什么其它的原因?请大家多多指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 估计不是刷新问题,你先在jtree的事件处理代码中看看有没有选取了有效的对象。 你可以使用回调函数来实现,假如你主界面的程序叫MainFrame.java,然后要弹出的那个窗口是另外一个文件,这时你定义一个接口interface CallBackInterface,然后主程序实现这个接口,当弹出的那个窗口数据处理完毕后,想在主窗口中显示时,你就调用那个接口中的方法,此时主程序就会收到通知,然后在主程序的接口函数中填写显示代码就可以了,给你提供一个我自己写的一个小例子吧(也可以用Observer模式实现,还没研究通)://Test.javapackage 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.javapackage 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(); }} 查一些有关观察者模式方面的资料。这样做起来就容易一些。参考文章:http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=17027 关于java多线程锁的问题 如何增加变量更新锁 String 类的对象在程序结束后,jvm能否将其回收。 请教日历控件怎么写 紧急问题,在线等...(希望提供资料) 内部类作用? jbuilder8 serial Number and key? 怎样能使我的Jwindow总在最前面,至少在我的程序运行中(在线等) 在线等待谢谢!!! 好久没有上来了,现在遇到感情问题,兄弟们帮帮忙啊 标题不知道写什么好,不过里面的问题对我到是很难,各位来看看吧! 求教串口问题 classpath的问题,查找了相关文章和资料也未解决
//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();
}
}
参考文章:
http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=17027