按下按钮时如何调用第二类?

时间:2013-02-20 17:07:51

标签: java swing

我做了一个简单的程序,用户输入名称和描述。如果用户按下OK,程序会将结果写入文件。基本上,我有3个班级。我想从class1调用我的class2并实现该方法。我知道如何在一个班级中完成它,但我也想知道这一点。提前谢谢。

问题是输入无法添加到文件中。也许我没有正确地调用文件名:

   if (result == JOptionPane.OK_OPTION){

class2 ad = new class2(this);
   }

以下是我的3个课程:

主要

public class mainclass {
    public static void main(String[] args) {
        class1 a = new class1();
    }
}

的Class1

import javax.swing.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.table.*;
import java.util.*;

public class class1{

final JTextField field1 = new JTextField(10);
final JTextField field2 = new JTextField(10);
JPanel panel = new JPanel();

public  class1() {

        panel.add(new JLabel("Name:"));
        panel.add(field1);
        panel.setLayout(new GridLayout(5,2));
        panel.add(new JLabel("Description:"));
        panel.add(field2);

        int result = JOptionPane.showConfirmDialog(null, panel,"Enter Information", JOptionPane.OK_CANCEL_OPTION);

        if (result == JOptionPane.OK_OPTION) {
            class2 ad = new class2 ();
        }
    }
}

的Class2

import javax.swing.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.table.*;
import java.util.*;

 public class class2 {

    class1 a;

    public class2(class1 a) {

        this.a = a;

        a = new class1();

        BufferedWriter writer = null;

        try {

            writer = new BufferedWriter( new FileWriter("file.txt", true));

            String add1 = a.field1.getText();
            String add2 = a.field2.getText();

            writer.write(add1);
            writer.write("\t");
            writer.write(add2);
            writer.write("\t");

        } catch ( IOException e) {

        } finally {
            try {
            if ( writer != null)
                writer.close( );
            } catch ( IOException e) {
            }
        }       
    }
}

2 个答案:

答案 0 :(得分:2)

a = new class1()中的行class2创建的实例与mainclass中创建的实例不同。而是将class1的引用传递给您的class2构造函数。

if (result == JOptionPane.OK_OPTION) {
    class2 ad = new class2(this);
}
...
public class2(class1 a) {
    //a = new class1();
    this.a = a;
    ...
}

答案 1 :(得分:2)

这是 a 问题。

class1的构造函数在此处创建class2的实例:

class2 ad = new class2();

调用class2的构造函数。

这里创建class1的实例:

a = new class1();

调用class1的构造函数。

再次提示你。

所以你只能在第二个提示之后到达class2的其余构造函数(如果你取消)。