一个窗体控制另外一个窗体,已经150分了

wangpeilei_403 2004-12-13 03:23:56
有个需求,当一个窗口(w_1)的数据修改并关闭后需要判断w_2是否已经打开,如果打开需要对其数据进行刷新。

两个窗体都是jInternalFrame,我想知道jinternalframe互访的函数???
...全文
197 点赞 收藏 20
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
drugon 2004-12-16
用一个公有变量进行通信不行吗?
回复
wangpeilei_403 2004-12-16
up
回复
wangpeilei_403 2004-12-16
我也是这么考虑的,然后给待判断的窗体一个线程来判断此变量的值,感觉这么是不是会影响效率啊
回复
wangpeilei_403 2004-12-15
要这么麻烦啊,
回复
wangpeilei_403 2004-12-14
to redher(红孩儿):你的方法我有点很不明白啊,FindComponent在java里根本就没有吧
还有 bigpool(wtj) ,我以前试过,可是怎么获得JInternalFrame的父窗体那?
回复
tomcatjava 2004-12-14
给w_2添加 WindowFocusListener ,实现就是筛新数据

另外给w_1添加WindowLisener,当窗口关闭后,让w_2获得Focus。

try。。。
回复
IEQQ 2004-12-14
哥们, 把这个程序复制到Jbuilder下面跑一下就可以了.
很easy!



import javax.swing.JFrame;
import java.awt.HeadlessException;
import java.awt.event.*;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author ieqq
* @version 1.0
*/

public class fm extends JFrame
{
public boolean opened = false;
public fm() throws HeadlessException
{
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws HeadlessException
{
fm fm1 = new fm();
fm1.setTitle("注意看JBuilder下面的信息栏的输出文字.");
fm1.show();
}
private void jbInit() throws Exception {
this.addWindowFocusListener(new fm_this_windowFocusAdapter(this));
}

void this_windowLostFocus(WindowEvent e) {
this.opened = false;
System.out.println("窗体已经失去焦点了!");
}

void this_windowGainedFocus(WindowEvent e) {
this.opened = true;
System.out.println("窗体已经获得焦点了!");
}

}

class fm_this_windowFocusAdapter implements java.awt.event.WindowFocusListener {
fm adaptee;

fm_this_windowFocusAdapter(fm adaptee) {
this.adaptee = adaptee;
}
public void windowGainedFocus(WindowEvent e) {
adaptee.this_windowGainedFocus(e);
}
public void windowLostFocus(WindowEvent e) {
adaptee.this_windowLostFocus(e);
}
}
回复
bigpool 2004-12-14
我觉得在构造JInteralFram的时候把父窗体传递给子窗体,不知道这样行不?
回复
bshaozi 2004-12-14
修改WindowListener()
内的windowClosed()不行么?
回复
afei11900 2004-12-14
用javaBean事件,,,,好像不难。。
回复
wangpeilei_403 2004-12-14
up
回复
luiss 2004-12-13
没研究过,顶一下
回复
wdman 2004-12-13
把w_2作为w_1的一个属性,这样w_2对w_1就可见了。
w_2 = new w_2();
w_1 = new w_1();
w_1.w_2 = w_2;

类似这样的代码就可以解决你说的问题。
回复
bigpool 2004-12-13
JDesktopPane desk=new JDesktopPane();
setContentPane(desk);
然后就可以用
JInternalFrame[] frame=desk.getAllFrames();
然后就可以判断
frame[i].isClosed();
如果已经打开了,就可以用frame[i].getTitle()或其他的函数得到你所要的JInternalFrame,其他的就能自己处理了。
回复
FGS 2004-12-13
楼上说的方法可行,
也可以利用Observer 进行组件间通信,我觉得也很不错.
回复
GJA106 2004-12-13
同意 redher(红孩儿)的看法。
同一个实例进程中就好处理,只是方法相互调用而以。
回复
redher 2004-12-13
你吧窗体看成实例处理(其实窗体本身就是一个类的实例),
一般窗体在tpye后都有
var
Form1:Tform;
这个Form1就是你的窗体,
同样在Form2中也有
你在Form2中应用函数
application.FindComponent(Fomr1);
判断是否身成就可以了
至于你说的函数,恐怕要自己写了
回复
zedk928 2004-12-13
就是同一个窗体类的两个实例之间的通信问题吧

没研究过,顶
回复
soulcy 2004-12-13
不知道
回复
wangpeilei_403 2004-12-13
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2004-12-13 03:23
社区公告
暂无公告