各位老师,我碰到的问题问题如下:
我使用Netbeans里的控件做了一个软件界面,其中有一个文本域jTextArea是用来显示数据库里信息的,下面代码的第一行就是控件拉好后系统自动生成的代码。printData()方法是我想用来对这个文本域设置显示文本信息的方法。我想把这个方法封装一下,写一个专门的类来描述它,因为要涉及到数据库中数据的实时显示,需要另做定时器来调用这个方法。遇到的问题是这样的:当我把这个方法单独拿出来建立了一个类后,在这个新建的类里,是无法访问jTextArea1这个文本域的,无法对其进行操作。有没有解决这个问题的方法呢?各位老师,谢谢!初学java,或许问题本身幼稚,各位老师见谅!
public javax.swing.JTextArea jTextArea1;
// End of variables declaration
public void printData(){
java.util.List<Sensor> sensorInfo = new ArrayList<Sensor>();
DataBase db_light=new DataBase();
sensorInfo =db_light.getData();
Iterator<Sensor> sensorInfoIte = sensorInfo.iterator(); //
while (sensorInfoIte.hasNext()) {
Sensor sensorData= new Sensor();
sensorData=sensorInfoIte.next();
jTextArea1.append(""+ sensorData.getDate());
jTextArea1.append(" ");
jTextArea1.append(""+ sensorData.getLight());
jTextArea1.append(" ");
jTextArea1.append(""+ sensorData.getTemperature());
jTextArea1.append("\n");
}
}
我使用Netbeans里的控件做了一个软件界面,其中有一个文本域jTextArea是用来显示数据库里信息的,下面代码的第一行就是控件拉好后系统自动生成的代码。printData()方法是我想用来对这个文本域设置显示文本信息的方法。我想把这个方法封装一下,写一个专门的类来描述它,因为要涉及到数据库中数据的实时显示,需要另做定时器来调用这个方法。遇到的问题是这样的:当我把这个方法单独拿出来建立了一个类后,在这个新建的类里,是无法访问jTextArea1这个文本域的,无法对其进行操作。有没有解决这个问题的方法呢?各位老师,谢谢!初学java,或许问题本身幼稚,各位老师见谅!
public javax.swing.JTextArea jTextArea1;
// End of variables declaration
public void printData(){
java.util.List<Sensor> sensorInfo = new ArrayList<Sensor>();
DataBase db_light=new DataBase();
sensorInfo =db_light.getData();
Iterator<Sensor> sensorInfoIte = sensorInfo.iterator(); //
while (sensorInfoIte.hasNext()) {
Sensor sensorData= new Sensor();
sensorData=sensorInfoIte.next();
jTextArea1.append(""+ sensorData.getDate());
jTextArea1.append(" ");
jTextArea1.append(""+ sensorData.getLight());
jTextArea1.append(" ");
jTextArea1.append(""+ sensorData.getTemperature());
jTextArea1.append("\n");
}
}
public javax.swing.JTextArea jTextArea1;
....
}class JP2 {
new JP().jTextArea1.append(""+ sensorData.getDate());
}为什么要这样做呢?
那我碰到的这个问题是为什么呢?
mainFrame mainframe=new mainFrame();
mainframe.printData();文本域里什么也没有发生
琢磨了一圈,又回到最开始的问题上了:为什么在自动生成的定义jtextArea1的类mainFrame外无法对这个文本域进行操作呢?(mainFrame类是我使用Netbenas控件构建图形界面的类)
因为这个原因,我的printData()方法也只能写在mainFrame类中。
另外,当我在工程的main方法中使用printData()方法时:
mainFrame mainframe=new mainFrame();
mainframe.printData();
文本域jTextArea1里什么也没有发生;然后我试着调试这个方法:我在printData()方法里加入了两条控制台输出命令:
public void printData(){
System.out.println("sssss");
jTextArea1.append("this is a test!\n");
System.out.println("aaaaa");
运行程序过后,发现串“sssss”和“aaaaa”都是可以在控制台输出的,但是它们之间的这条jTextArea1.append("fuck!\n"); 语句并没有能够在GUI界面的文本域中显示任何信息,这能否说明在类mainFrame外是无法对jTextArea1进行操作的吗?于是我把这个printData()方法写在了mainFrame类的构造方法中:
public class mainFrame extends javax.swing.JFrame {
printData();
}
这时候,运行程序时,在GUI界面的文本显示域中就有了数据库中的数据显示出来。
但这是不正常的吧?不应该把这么一个方法随时放在构造方法里调用老师们,我碰到的这个问题原因出在哪里呢?有没有人也碰到过?谢谢!
原本为private,我将他设置成了public后,上述的问题依然存在
new了就是新的窗体对象,怎么可能显示到原来的窗体对象上
新类中添加一个构造函数,参数是JTextArea ,构造对象的时候传你要改变的JTextArea 对象进去