Mostrar ArrayList de Objetos en un JFrame
si tengo una clase con una lista de personas, ¿como hago para poder imprimirlos en otra clase?
Ejemplo:
ArrayList<Persona> vectPersona=new ArrayList<Persona>();
public void registrarPersona(Persona nuevaPersona){
vectPersona.add(nuevaPersona);
}
// y tengo este metodo que me lo muestra por consola pero quiero que me lo muestre en un
// JFrame atraves de un Panel o una tabla u cualquier otro medio el cual pueda interactuar con los registros del arraylist
public void mostrarPersonas(){
for (int i = 0; i < vectPersona.size(); i++) {
if (vectPersona.get(i).getCodigoPersona()>=0) {
System.out.println("cod: "+vectPersona.get(i).getCodigoPersona()+" Persona : "+vectPersona.get(i).getNombreUsuario());
System.out.println();
}
}
}
}
- Payan's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Pues donde tengas tu
Pues donde tengas tu componente gráfico haces una copia o con el mismo arraylist lo muestras. Por ejemplo:
Iterator iterador = persona.listIterator(); //el objeto iterador te ayuda a recorrer una coleccion.
while(iterador.hasNext()) {
at.append(iterador.next() + "\n"); //el objeto at es un JTextArea y el método append agrega el contenido de persona al area de texto
}
}
Espero que sea lo que preguntaste. Por convención las clases comienzan con mayúscula.
Esta es el primer frame donde
Esta es el primer frame donde el usuario introduce nombre y dni y luego aparece
otro frame con un JTextArea donde estan todos los usuarios ingresados.
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JTextPane;
public class Datos_Usuarios extends JFrame {
listaDePersonas registroPersona=new listaDePersonas();
private JPanel contentPane;
private JButton Registrar;
private JTextField Nombre;
private JTextField Dni;
private int cod=0;
/**
* Launch the application.
*/
/**
* Create the frame.
*/
public Datos_Usuarios() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(500, 500, 238, 178);
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
contentPane = new JPanel();
contentPane.setBackground(new Color(153, 204, 255));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
setVisible(true);
disenoVentana();
}
public void disenoVentana(){
contentPane.setLayout(null);
JButton Registrar = new JButton("Registrar");
//botones
Registrar.setBounds(64, 112, 120, 23);
contentPane.add(Registrar);
//fin botones
//labels
JLabel lblNewLabel = new JLabel("NOMBRE :");
lblNewLabel.setBounds(28, 28, 78, 14);
contentPane.add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("DNI : ");
lblNewLabel_1.setBounds(28, 72, 67, 14);
contentPane.add(lblNewLabel_1);
//fin labels
// cajas de texto
Nombre = new JTextField();
Nombre.setBounds(87, 69, 120, 20);
contentPane.add(Nombre);
Nombre.setColumns(10);
Dni = new JTextField();
Dni.setBounds(87, 25, 120, 20);
contentPane.add(Dni);
Dni.setColumns(10);
contentPane.list();
Registrar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Persona nuevaPersona;
nuevaPersona=new Persona();
String nomb=Nombre.getText();
String dni=Dni.getText();
nuevaPersona.dato2(cod, nomb, dni);
registroPersona.registrarPersona(nuevaPersona);
cod++;
//¿lo del cod que es el cod como podria hacerlo para cada vez que pulse y agrege y se incremente?
}
});
}
}
el frame del JTextArea es este, pero no me aparece y no se que estoy haciendo mal.
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextPane;
public class lista_grafica extends JFrame {
private JPanel contentPane;
private JTextArea panel;
/**
* Launch the application.
*/
/**
* Create the frame.
*/
public lista_grafica() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JTextArea panel = new JTextArea();
panel.setBounds(111, 77, 237, 119);
contentPane.add(panel);
mostrar_lista();
}
public void mostrar_lista(){
Lista_De_Personas obj= new Lista_De_Personas();
obj.mostrar();
}
// este metodo esta dentro de la clase Lista_De_Personas
public void mostrar(){
if(!vectPersona.isEmpty()) { //persona es tu arraylist o list
Iterator iterador = vectPersona.listIterator(); //el objeto iterador te ayuda a recorrer una coleccion.
while(iterador.hasNext()) {
at.append(iterador.next() + "\n"); //el objeto at es un JTextArea y el método append agrega el contenido de persona al area de texto
}
}
}
}
Lo primero que observe es que
Lo primero que observe es que en la clase
Datos_Usuarios
tienes un objeto de la clasePersona
que debería ser una variable de instancia (variable miembro) en lugar de una variable local. Lo segundo, es que todos tus componentes gráficos deberían ser también declarados como variables miembro.Lo tercero es que en tu clase lista_grafica, según la convención establece que los nombres de las clases inicien con mayúsculas.
EDIT: Lo cuarto, no veo referencia a tu arraylist vecPersona dentro de la clase. ¿Como obtienes ese objeto? Jaja siempre me brinco los comentarios, mala costumbre...
Aquí lo que debes de hacer (una opción) es obtener tu arraylist. o hacer un método que reciba el JTextArea dentro de la clase ListaDePersonas.
Algo así;
//Aqui haces el recorrido y pegas en el JTextArea
}
Quinto, estas usando un componente gráfico de tipo JTextArea que se llama panel. Pero en el método mostrar usas uno que se llama at
Ademas se recomienda que dentro de tu aplicación solo debe haber un JFrame, que seria la ventana principal, las demás ventanas pueden ser JDialog.
Saludos.
Gracias amigo! aunque no
Gracias amigo! aunque no consigo hacerlo funcionar jejej ,si eres tan amable de poner un ejemplo del codigo
solo con pocos datos solo para ver como lo haces.
para resumirte lo que intento hacer es:
Recoger del JTextfield el nombre de una persona que esta una clase del objeto persona dentro de un formulario, y cuando
presione el boton ese dato se agrege a un arraylist de objetos ,en este caso un arraylist de personas, y al presionar aparezca
otro frame o jdialog con un panel con los nombres que voy registrando...
No es tan dificil pero .. no me sale jejeje
ARRAY LIST
Buenas Amigo ..
Una de las formas que los puedes hacer es primero me imagino que debes tener tu clase con tus get // set . Digamos Persona.
cuando estemos en el Frame :
haces un llamado a la clase
-------------------------------------------------------------------------------------
per.setCodPersona(txtCodigo.getText());
//y asi todos las variables....
luego
//o agregas al arrayList: digamos que tu arraylist se llama :
List<Persona> lista=new ArrayList<Persona>();
lista.add(per); // Lo Agregas
//luego para imprimirlo ,tendrías que hacer esto
for(Persona item:lista){
txtCodigo.setText(item.getCodPersona);
//y asi imprimes las demas variables en los txt vale decir que te va a traer solo el ultimo dato ingresado
}
// asi lo imprimes en una tabla
DefaultTableModel tabla=(DefaultTableModel) tbltabla.getModel();
tabla.setRowCount(0);
for(Persona item:lista){
Objet fila[]={item.getCodPersona()};
tabla.add(fila);
}