java中两个窗口之间的函数传递

我窗口1中打开一个新窗口2,新窗口2中一个按钮点击之后把一个值要传入窗口1,在窗口1的文本框里写下这个数值。我在窗口1中建立函数,staticvoidset(string... 我窗口1中打开一个新窗口2,新窗口2中一个按钮点击之后把一个值要传入窗口1,在窗口1的文本框里写下这个数值。
我在窗口1中建立函数,
static void set(string value)
{
t.setText(value);
}
然后窗口2按钮被按下时
if(event.getSource==button1)
{
Diancai.set(x2);
}
x2是窗口2中的一个数值,String类型。Diancai是我窗口1的名字。
但是点击按钮之后没有反应。和我窗口1的这段话有关么?
public static void main(String[] args)
{
Diancai application=new Diancai();
application.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}

我该写的是application.set(x2)而不是Diancai.set(x2);么?但是写了报错说找不到application
展开
 我来答
百度网友7c4983280
2013-08-07 · TA获得超过182个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:75万
展开全部
public class Test1 {
public static void main(String[] args) {
new MainFrame();
}
}

class MainFrame extends JFrame{
public JTextField field=new JTextField();
public JButton button=new JButton("打开新窗口");
public MainFrame mainFrame=this;
public MainFrame(){
this.setBounds(0, 0, 320, 240);
this.add(field,BorderLayout.CENTER);
this.add(button,BorderLayout.EAST);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//打开新窗口,把主窗口对象的引用传给新窗口
new NewFrame(mainFrame);
}
});
}
}

class NewFrame extends JFrame{
public JTextField field=new JTextField();
private MainFrame mainFrame;//主窗口的引用
private JButton button=new JButton("设置主窗口值");
//接收到主窗口的引用 ,就可以直接操作主窗口的控件或变量了
public NewFrame(final MainFrame mainFrame){
this.mainFrame=mainFrame;
this.setBounds(320, 240, 320, 240);
this.add(field,BorderLayout.CENTER);
this.add(button,BorderLayout.EAST);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mainFrame.field.setText(field.getText());
}
});
}
}
更多追问追答
追问
很有启示!
但是我想点击按钮的时候才把窗口1的文本建立起来呢?我直接在窗口2定义JTextfield field2;
然后按钮监听里写
mainFrame.field2=new JTextfield();
mainFrame.field2.setText(field.getText());
这么写为什么不能建立起来?
追答

面对对象的编程不光要考虑你要 完成什么,还要考虑封装性的,否则将使你的程序后期难以维护,按照你的想法,你完全可以不在窗口1里先建立这个文本,

当窗口2按下按钮的时候,把在窗口2动态创建的一个JTextField 增加窗口1,请看代码

class NewFrame extends JFrame{
    public JTextField field=new JTextField();
    private JButton button=new JButton("设置主窗口值");
    public NewFrame(final MainFrame mainFrame){
        this.setBounds(320, 240, 320, 240);
        this.add(field,BorderLayout.CENTER);
        this.add(button,BorderLayout.EAST);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setVisible(true);
        final JTextField jtf1= new JTextField();
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
             mainFrame.add(jtf1,BorderLayout.CENTER);
             jtf1.setText(field.getText());
             mainFrame.getContentPane().validate();
            }
        });
    }
}
但这样的代码并不利于维护,
如果你窗口1现在又想改变这个文本了,哪你是不是很不容易拿到这个动态创建出来的JTextField?,还要增加额外的代码去维护这个 JTextField 可维护性差
匿名用户
2013-08-07
展开全部
一个窗口创建另一个窗口的时候,将自己当作参数传递给新建立的窗口,就可以很方便调用了。

窗口1中打开新窗口做法:

新窗口2 win2= new 新窗口2(窗口1.this);

class 新窗口2{
窗口1 win1;

public 新窗口2(窗口1 win1){
this.win1= win1;

}

}

窗口2的事件

if(button1.equals(event.getSource)){
win1.set(x2);
}

注意button1 不要搞混了,有TX建立窗口的类变量、又定义构造中的变量,这样类变量中的button1就永远是null了。
追问
把自己当做参数传过去,
class 新窗口2{
窗口1 win1;

public 新窗口2(窗口1 win1){
this.win1= win1; public 新窗口2(窗口1 win1){
this.win1= win1;

}
那窗口2的东西不会被窗口1覆盖掉么?
追答
那窗口2的东西不会被窗口1覆盖掉么?

你写的代码决定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式