我有两个班级:
public class VentanaPrincipal extends javax.swing.JFrame
{
MetodosFicheros objMetodosFicheros;
public void ListadoTextArea(String textLine)
{
listadoTextArea.append(textLine);
}
private void datosButtonActionPerformed(java.awt.event.ActionEvent evt)
{
objMetodos = new MetodosFicheros();
objMetodos.leerFichero();
}
}
public class MetodosFicheros
{
private VentanaPrincipal objVentana;
public void leerFichero()
{
String textLine;
objVentana.ListadoTextArea(textLine);
}
}
我想打印" textLine" in" listadoTextArea"但它什么都不显示。如果我使用System.out.println(textLine)
代替listadoTextArea.append(textLine)
,则控制台会显示" textLine"正确。所以,我不知道错误在哪里。
对不起,代码的大部分内容都在这里。
public class VentanaPrincipal extends javax.swing.JFrame
{
private String clave;
private String nombre;
private int edad;
private float sueldo;
private MetodosFicheros objMetodos;
public VentanaPrincipal()
{
initComponents();
}
public void ListadoTextArea(String textLine)
{
listadoTextArea.append(textLine);
}
private void datosButtonActionPerformed(java.awt.event.ActionEvent evt {
objMetodos = new MetodosFicheros();
objMetodos.leerFichero();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
claveText = new javax.swing.JTextField();
edadText = new javax.swing.JTextField();
sueldoText = new javax.swing.JTextField();
nombreText = new javax.swing.JTextField();
grabarButton = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
datosButton = new javax.swing.JButton();
indicesButton = new javax.swing.JButton();
indicesDatosButton = new javax.swing.JButton();
ordenarButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
listadoTextArea = new javax.swing.JTextArea();
jPanel3 = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
claveBuscarText = new javax.swing.JTextField();
indiceSinOrdenarButton = new javax.swing.JButton();
indiceOrdenadoButton = new javax.swing.JButton();
busquedaDicotomica = new javax.swing.JButton();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
nombreBuscarText = new javax.swing.JTextField();
edadBuscarText = new javax.swing.JTextField();
sueldoBuscarText = new javax.swing.JTextField();
registrosText = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
indiceText = new javax.swing.JTextField();
errorText = new javax.swing.JTextField();
}
// Variables declaration - do not modify
private javax.swing.JButton busquedaDicotomica;
private javax.swing.JTextField claveBuscarText;
private javax.swing.JTextField claveText;
private javax.swing.JButton datosButton;
private javax.swing.JTextField edadBuscarText;
private javax.swing.JTextField edadText;
private javax.swing.JTextField errorText;
private javax.swing.JButton grabarButton;
private javax.swing.JButton indiceOrdenadoButton;
private javax.swing.JButton indiceSinOrdenarButton;
private javax.swing.JTextField indiceText;
private javax.swing.JButton indicesButton;
private javax.swing.JButton indicesDatosButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea listadoTextArea;
private javax.swing.JTextField nombreBuscarText;
private javax.swing.JTextField nombreText;
private javax.swing.JButton ordenarButton;
private javax.swing.JTextField registrosText;
private javax.swing.JTextField sueldoBuscarText;
private javax.swing.JTextField sueldoText;
}
public class MetodosFicheros
{
public MetodosFicheros(){}
private VentanaPrincipal objVentana;
private String dialogo = "No se ha encontrado el fichero";
private String fileName = "FicherosDatos.dat";
private JTextField JTextField;
private JTextArea JTextArea;
/****************************************************************************************
**Metodo que graba en un fichero ".dat" los valores introducidos en la interfaz grafica**
*****************************************************************************************/
public void grabarFichero(String clave, String nombre, int edad, float sueldo)
{
objVentana = new VentanaPrincipal();
DataOutputStream fichero = new DataOutputStream(new FileOutputStream(fileName, true));
fichero.writeUTF(clave);
fichero.writeUTF(nombre);
fichero.writeInt(edad);
fichero.writeFloat(sueldo);
}
public void leerFichero()
{
String textLine;
JTextArea = new JTextArea();
FileReader fichero = null;
BufferedReader reader;
objVentana = new VentanaPrincipal();
fichero = new FileReader(fileName);
reader = new BufferedReader(fichero);
while((textLine = reader.readLine()) != null)
{
objVentana.ListadoTextArea(textLine);
}
}
}
答案 0 :(得分:1)
猜测,也许你的问题是由于改变了错误引用的状态 - 你可能已经创建了第二个对象,并且正在改变第二个对象的状态,而不是当前显示的状态。
这里的关键是下面的objVentana变量:
public class MetodosFicheros
{
private VentanaPrincipal objVentana;
public void leerFichero()
{
String textLine;
objVentana.ListadoTextArea(textLine);
}
}
如何为其指定参考?您是否100%确定它实际上是指显示的VentanaPrincipal,或者代码中的某处未显示调用new VentanaPrincipal()
创建新引用,并且您正在调用方法。我敢打赌,这正是你正在做的事情。
但更重要的是,无论我是对还是错,你都应该努力改善你的问题,因为它缺少关键信息,这些信息可以让我们在没有猜测的情况下帮助你。 / p>
修改强> 解决方案是不来创建一个新的VentanaPrincipal,而是将对当前查看的VentanaPrincipal对象的引用传递到MetodosFicheros对象,然后在其上调用方法。 所以将MetodosFicheros改为 在调用上面的构造函数时传入适当的VentanaPrincipal, 并且不要创建任何新的VentanaPrincipal对象。
是的,我是对的。正如我所提到的,你所要做的就是搜索你的代码new VentanaPrincipal()
,每当你看到它时,你就知道你正在创建一个新的VentanaPrincipal窗口对象,它完全不同于那个对象。显示:public void leerFichero()
{
String textLine;
JTextArea = new JTextArea();
FileReader fichero = null;
BufferedReader reader;
objVentana = new VentanaPrincipal(); // ********* here **********
fichero = new FileReader(fileName);
reader = new BufferedReader(fichero);
while((textLine = reader.readLine()) != null)
{
objVentana.ListadoTextArea(textLine);
}
}
}
public class MetodosFicheros {
private VentanaPrincipal objVentana;
public MetodosFicheros(VentanaPrincipalobjVentana) {
this.objVentana = objVentana;
}
private MetodosFicheros objMetodos = new MetodosFicheros(this);