Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > JTable con lista enlazada

Hola a todos, estoy intentando mostrar en un jTable los datos guardados en una lista enlazada, pero al momento de crear el for para agregar las filas con los datos a la tabla me marca el error "for-each not applicable to expression type", quisiera su ayuda para poder mostrar los datos de la lista en la tabla, las clases que tengo son las siguientes:

public class Main {

public static void main(String[] args) {
new CrearSolicitud().setVisible(true);
}
}

[-- --]

public class Materiales {
private int idSolicitud;
private String solicitante;
private String pieza;
private double cantidad;
private String descripcion;

public Materiales(int idSolicitud, String solicitante, String pieza, double cantidad, String descripcion) {
this.idSolicitud = idSolicitud;
this.solicitante = solicitante;
this.pieza = pieza;
this.cantidad = cantidad;
this.descripcion = descripcion;
}

public String getDescripcion() {
return descripcion;
}

public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}

public int getIdSolicitud() {
return idSolicitud;
}

public void setIdSolicitud(int idSolicitud) {
this.idSolicitud = idSolicitud;
}

public String getSolicitante() {
return solicitante;
}

public void setSolicitante(String solicitante) {
this.solicitante = solicitante;
}

public String getPieza() {
return pieza;
}

public void setPieza(String pieza) {
this.pieza = pieza;
}

public double getCantidad() {
return cantidad;
}

public void setCantidad(double cantidad) {
this.cantidad = cantidad;
}
}

[-- --]

import javax.swing.JOptionPane;

public class Lista {
private Nodo inicio;
private Nodo fin;

public Lista() {
inicio = null;
fin = null;
}

public boolean estaVacia() {
if (inicio == null) {
return true;
} else {
return false;
}
}

void agregarInicio(Materiales ma) {
Nodo actual;

if (this.estaVacia()) {

actual = new Nodo(ma, null);
inicio= actual;
fin= actual;

} else {
actual= new Nodo(ma, null);
fin.setNext(actual);
fin = actual;
}
}

void mostrar(){
Solicitudes s = new Solicitudes();
if(this.estaVacia()){
JOptionPane.showMessageDialog(null, "¡Esta vacia!");
}
else{
Nodo temporal;
temporal = inicio;
while(temporal!= null){
JOptionPane.showMessageDialog(null,temporal.getDato().toString());
temporal= temporal.getNext();
}
}
}

public int tamaño() {
int contador = 0;
Nodo c = this.inicio;
while (c != null) {
contador++;
c = c.getNext();
}
System.out.println(""+ contador);
return contador;
}
}

[-- --]

public class Nodo {
private Materiales dato;
private Nodo next;

public Nodo(Materiales dato, Nodo next) {
this.dato = dato;
this.next = next;
}

public Materiales getDato() {
return dato;
}

public void setDato(Materiales dato) {
this.dato = dato;
}

public Nodo getNext() {
return next;
}

public void setNext(Nodo next) {
this.next = next;
}
}

[-- --]

import javax.swing.JOptionPane;

public class CrearSolicitud extends javax.swing.JFrame {
public static Lista lista = new Lista();
int id = 10000;

public CrearSolicitud() {
initComponents();
}

public void Limpiar(){
txtCanPie.setText("");
txtDesPie.setText("");
txtNomPie.setText("");
txtNomSol.setText("");
}

@SuppressWarnings("unchecked")

private void txtNomSolActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void txtNomPieActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void txtCanPieActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void txtDesPieActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {
if(txtNomSol.getText().isEmpty() || txtNomPie.getText().isEmpty() || txtCanPie.getText().isEmpty() || txtDesPie.getText().isEmpty()){
JOptionPane.showMessageDialog(this, "Llene los campos faltantes");
} else {
String solicitante = txtNomSol.getText();
String pieza = txtNomPie.getText();
int cantidad = Integer.parseInt(txtCanPie.getText());
String descripcion = txtDesPie.getText();
id++;

Materiales m = new Materiales(id, solicitante, pieza, cantidad, descripcion);
lista.agregarInicio(m);

JOptionPane.showMessageDialog(rootPane, "La solicitud se ha creado");
Limpiar();
}
}

private void btnVerSolActionPerformed(java.awt.event.ActionEvent evt) {
new Solicitudes().setVisible(true);
this.dispose();
}

// Variables declaration - do not modify
private javax.swing.JButton btnAceptar;
private javax.swing.JButton btnVerSol;
private javax.swing.JLabel lblCanPie;
private javax.swing.JLabel lblDesPie;
private javax.swing.JLabel lblNomPie;
private javax.swing.JLabel lblNomSol;
private javax.swing.JLabel lblSolMat;
private javax.swing.JPanel panelCrearSolicitud;
private javax.swing.JTextField txtCanPie;
private javax.swing.JTextField txtDesPie;
private javax.swing.JTextField txtNomPie;
private javax.swing.JTextField txtNomSol;
// End of variables declaration
}

[-- --]


import javax.swing.table.DefaultTableModel;

public class Solicitudes extends javax.swing.JFrame {
public static DefaultTableModel modelo;

public Solicitudes() {
initComponents();
modelo = (DefaultTableModel)tblSolicitudes.getModel();
}

@SuppressWarnings("unchecked")

private void btnVolverActionPerformed(java.awt.event.ActionEvent evt) {
new CrearSolicitud().setVisible(true);
}

private void btnMostarActionPerformed(java.awt.event.ActionEvent evt) {
modelo.getDataVector().clear();
for(Materiales mat: CrearSolicitud.lista) Aquí marca el error
{
modelo.addRow(new Object[]{mat.getIdSolicitud(), mat.getSolicitante(), mat.getPieza(), mat.getCantidad(), mat.getDescripcion()});
}
}

// Variables declaration - do not modify
private javax.swing.JButton btnMostar;
private javax.swing.JButton btnVolver;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblSolicitudes;
private javax.swing.JPanel panelSolicitud;
private javax.swing.JTable tblSolicitudes;
// End of variables declaration
}


Ya no se que hacer y el problema es que tengo que hacer uso de lista enlazada tal como la muestro en mi clase.

Gracias de antemano, saludos.

noviembre 24, 2016 | Registered Commenterrbustillosa

Hola, antes de nada, comentarte, que si vas a poner código con la intencion de que alguien lo chekee, pon el codigo completo de las clases(¿Donde estan los initComponents()?)

Ahora, por otro lado, para poder usar un for(for extendido) en la forma que intentas hacerlo con una estructura propia creada por ti:

for(Objeto identificador:Lista){ ... }

Necesitas que la lista(tu clase Lista) implemente la interfaz Iterable<E>, ademas de crear un objeto que implemente a Iterator<E> para el tipo de objetos que tienes en la lista. Aquí un ejemplo

Bueno, prueba a ver que tal y ya nos cuentas. Un saludo

noviembre 24, 2016 | Registered Commenterloderain