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

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

两个窗体都是jInternalFrame,我想知道jinternalframe互访的函数???
...全文
229 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧