我做了一个简单的程序,用户输入名称和描述。如果用户按下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) {
}
}
}
}
答案 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
的其余构造函数(如果你取消)。