gpt4 book ai didi

java - 为什么 JTextArea.append() 不显示任何内容?

转载 作者:行者123 更新时间:2023-12-01 12:25:45 26 4
gpt4 key购买 nike

我有两门课:

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);
}
}

我想在“listadoTextArea”中打印“textLine”,但它不显示任何内容。如果我使用 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);
}
}
}

最佳答案

猜测,也许您的问题是由于更改了错误引用的状态 - 您可能创建了第二个对象,并且正在更改第二个对象的状态,而不是当前显示的对象。

这里的关键是下面的 objVentana 变量:

public class MetodosFicheros
{
private VentanaPrincipal objVentana;

public void leerFichero()
{
String textLine;
objVentana.ListadoTextArea(textLine);
}
}

如何为其分配引用?您是否 100% 确定它实际上引用了显示的 VentanaPrincipal,或者代码中是否有某个位置未显示对创建新引用的 new VentanaPrincipal() 的调用,并且您是调用方法。我敢打赌,这正是您正在做的事情。

但更重要的是,无论我是对还是错,您都应该努力改进您的问题,因为它缺少关键信息,而这些信息可以让我们无需猜测来帮助您。

<小时/>

编辑
是的,我是对的。正如我所提到的,您所要做的就是在代码中搜索 new VentanaPrincipal(),只要您看到它,您就知道您正在创建一个新的 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);
}
}
}

解决方案是创建一个新的 VentanaPrincipal,而是将当前查看的 VentanaPrincipal 对象的引用传递到您的 MetodosFicheros 对象中,然后调用它的方法。

因此将 MetodosFicheros 更改为

public class MetodosFicheros {
private VentanaPrincipal objVentana;

public MetodosFicheros(VentanaPrincipalobjVentana) {
this.objVentana = objVentana;
}

调用上述构造函数时传入适当的VentanaPrincipal,

private MetodosFicheros objMetodos = new MetodosFicheros(this);

并且不要创建任何新的 VentanaPrincipal 对象。

关于java - 为什么 JTextArea.append() 不显示任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26346293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com