Java Jframe 问题更新 Jlist 使用对象的 arrayList 替换整个列表
Java Jframe issue updating Jlist replace entire list using arrayList of object
这是我第一次在这里寻求帮助,如果我做错了什么,请告诉我。我的母语是西班牙语,抱歉有些文字是西班牙语。我刚刚开始 java,所以如果您发现我的代码有问题(除了我要求的),请告诉我,谢谢。
解释代码:
我有一个表单,它通过“JtextFields”获取四个字符串,并在您按下按钮(通过 btAgregarRegistro 侦听器)后将它们放在 class“Cliente”的对象“cliente1”的属性上。然后我将对象添加到 arrayList
//Arraylist declaration
private List<Cliente> arregloClientes = new ArrayList<>();
//Add the object to the ArrayList
arregloClientes.add(cliente1);
然后我更新 Jlist“listClientes”(在函数 actualizarLista() 上),以便您可以在添加记录后立即在表单上看到它。
该更新调用 class (Cliente) getDatosClientes 的方法,该方法将所有属性带到 DefaultListModel,然后将其显示在 Jlist 上
我的问题:
当我添加一条新记录时,我添加的最后一条记录会替换整个列表等等。因此,我的方法“getDatosClientes()”的第一个打印结果很好,但第二个打印结果替换了列表中的第一个。我会说问题出在更新上,但我已经尝试了很多东西,但似乎没有任何效果。我希望我正确地解释了自己。非常感谢!
这是全部代码:
Main.java(主要)
package nickoos;
public class Main
{
public static void main(String[] args)
{
Formulario1();
}
public static void Formulario1()
{
Formulario frame1 = new Formulario(); //instanciar
frame1.setContentPane(new Formulario().getPanel()); //mostrar el panel
frame1.show();
frame1.setSize(800,600);
frame1.setLocation(600,230);
}
}
Cliente.java (class)
package nickoos;
public class Cliente
{
private String nombre;
private String apellido;
private String email;
private String telefono;
public Cliente(String nombre, String apellido, String email, String telefono)
{
this.nombre = nombre;
this.apellido = apellido;
this.email = email;
this.telefono = telefono;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getDatosClientes()
{
return "Nombre: " + getNombre() + " Apellido: " + getApellido() + " Email: " + getEmail() + " Teléfono: " + getTelefono();
}
}
Formulario.java(表格)
package nickoos;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class Formulario extends JFrame {
private JButton btAgregarRegistro;
private JPanel panel;
private JLabel lbTitulo;
private JLabel lbNombre;
private JTextField txNombre;
private JLabel lbApellido;
private JLabel lbInstrucciones;
private JLabel lbSimetria;
private JLabel lbEmail;
private JLabel lbTelefono;
private JTextField txApellido;
private JTextField txEmail;
private JTextField txTelefono;
private JList listClientes;
private JLabel lbSubtituloLista;
private JButton btEliminarRegistro;
private JButton btModificarRegistro;
private List<Cliente> arregloClientes = new ArrayList<>();
//Instance the class
Cliente cliente1 = new Cliente("","","","");
public JPanel getPanel() {
return panel;
}
public Formulario()
{
//Listener to add a record
btAgregarRegistro.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//Set the attributes to the object
cliente1.setNombre(txNombre.getText());
cliente1.setApellido(txApellido.getText());
cliente1.setEmail(txEmail.getText());
cliente1.setTelefono(txTelefono.getText());
//Add the object to the ArrayList
arregloClientes.add(cliente1);
//Update the list
actualizarLista();
//Clear textFields after adding the record
blanquearCampos();
}
});
//Listener "delete"
btEliminarRegistro.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
int indice = listClientes.getSelectedIndex();
arregloClientes.remove(indice);
actualizarLista();
}
});
}
//Clear textFields
private void blanquearCampos()
{
txNombre.setText("");
txApellido.setText("");
txEmail.setText("");
txTelefono.setText("");
}
//Update list
private void actualizarLista()
{
DefaultListModel datos = new DefaultListModel();
for (int i = 0; i < arregloClientes.size(); i++)
{
Cliente index = arregloClientes.get(i);
datos.addElement(index.getDatosClientes());
}
listClientes.setModel(datos);
}
}
移动这条线
//Instance the class
Cliente cliente1 = new Cliente("","","","");
进入这个方法
btAgregarRegistro.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//move it HERE
//Set the attributes to the object
cliente1.setNombre(txNombre.getText());
cliente1.setApellido(txApellido.getText());
cliente1.setEmail(txEmail.getText());
cliente1.setTelefono(txTelefono.getText());
//Add the object to the ArrayList
arregloClientes.add(cliente1);
//Update the list
actualizarLista();
//Clear textFields after adding the record
blanquearCampos();
}
});
发生的事情是您引用了内存中的同一个对象,只是更改了它的值。你想要做的是每次你想添加一个客户端时创建一个新对象。
这是我第一次在这里寻求帮助,如果我做错了什么,请告诉我。我的母语是西班牙语,抱歉有些文字是西班牙语。我刚刚开始 java,所以如果您发现我的代码有问题(除了我要求的),请告诉我,谢谢。
解释代码: 我有一个表单,它通过“JtextFields”获取四个字符串,并在您按下按钮(通过 btAgregarRegistro 侦听器)后将它们放在 class“Cliente”的对象“cliente1”的属性上。然后我将对象添加到 arrayList
//Arraylist declaration
private List<Cliente> arregloClientes = new ArrayList<>();
//Add the object to the ArrayList
arregloClientes.add(cliente1);
然后我更新 Jlist“listClientes”(在函数 actualizarLista() 上),以便您可以在添加记录后立即在表单上看到它。 该更新调用 class (Cliente) getDatosClientes 的方法,该方法将所有属性带到 DefaultListModel,然后将其显示在 Jlist 上 我的问题: 当我添加一条新记录时,我添加的最后一条记录会替换整个列表等等。因此,我的方法“getDatosClientes()”的第一个打印结果很好,但第二个打印结果替换了列表中的第一个。我会说问题出在更新上,但我已经尝试了很多东西,但似乎没有任何效果。我希望我正确地解释了自己。非常感谢!
这是全部代码:
Main.java(主要)
package nickoos;
public class Main
{
public static void main(String[] args)
{
Formulario1();
}
public static void Formulario1()
{
Formulario frame1 = new Formulario(); //instanciar
frame1.setContentPane(new Formulario().getPanel()); //mostrar el panel
frame1.show();
frame1.setSize(800,600);
frame1.setLocation(600,230);
}
}
Cliente.java (class)
package nickoos;
public class Cliente
{
private String nombre;
private String apellido;
private String email;
private String telefono;
public Cliente(String nombre, String apellido, String email, String telefono)
{
this.nombre = nombre;
this.apellido = apellido;
this.email = email;
this.telefono = telefono;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getDatosClientes()
{
return "Nombre: " + getNombre() + " Apellido: " + getApellido() + " Email: " + getEmail() + " Teléfono: " + getTelefono();
}
}
Formulario.java(表格)
package nickoos;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class Formulario extends JFrame {
private JButton btAgregarRegistro;
private JPanel panel;
private JLabel lbTitulo;
private JLabel lbNombre;
private JTextField txNombre;
private JLabel lbApellido;
private JLabel lbInstrucciones;
private JLabel lbSimetria;
private JLabel lbEmail;
private JLabel lbTelefono;
private JTextField txApellido;
private JTextField txEmail;
private JTextField txTelefono;
private JList listClientes;
private JLabel lbSubtituloLista;
private JButton btEliminarRegistro;
private JButton btModificarRegistro;
private List<Cliente> arregloClientes = new ArrayList<>();
//Instance the class
Cliente cliente1 = new Cliente("","","","");
public JPanel getPanel() {
return panel;
}
public Formulario()
{
//Listener to add a record
btAgregarRegistro.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//Set the attributes to the object
cliente1.setNombre(txNombre.getText());
cliente1.setApellido(txApellido.getText());
cliente1.setEmail(txEmail.getText());
cliente1.setTelefono(txTelefono.getText());
//Add the object to the ArrayList
arregloClientes.add(cliente1);
//Update the list
actualizarLista();
//Clear textFields after adding the record
blanquearCampos();
}
});
//Listener "delete"
btEliminarRegistro.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
int indice = listClientes.getSelectedIndex();
arregloClientes.remove(indice);
actualizarLista();
}
});
}
//Clear textFields
private void blanquearCampos()
{
txNombre.setText("");
txApellido.setText("");
txEmail.setText("");
txTelefono.setText("");
}
//Update list
private void actualizarLista()
{
DefaultListModel datos = new DefaultListModel();
for (int i = 0; i < arregloClientes.size(); i++)
{
Cliente index = arregloClientes.get(i);
datos.addElement(index.getDatosClientes());
}
listClientes.setModel(datos);
}
}
移动这条线
//Instance the class
Cliente cliente1 = new Cliente("","","","");
进入这个方法
btAgregarRegistro.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//move it HERE
//Set the attributes to the object
cliente1.setNombre(txNombre.getText());
cliente1.setApellido(txApellido.getText());
cliente1.setEmail(txEmail.getText());
cliente1.setTelefono(txTelefono.getText());
//Add the object to the ArrayList
arregloClientes.add(cliente1);
//Update the list
actualizarLista();
//Clear textFields after adding the record
blanquearCampos();
}
});
发生的事情是您引用了内存中的同一个对象,只是更改了它的值。你想要做的是每次你想添加一个客户端时创建一个新对象。