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 展开
我在窗口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 展开
2个回答
展开全部
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了。
窗口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覆盖掉么?
你写的代码决定。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询