Comment faire pour remplir un jTable à partir d'une liste de tableaux?

Le programme est destiné à prendre de l'entrée de l'utilisateur et de les stocker dans une liste de tableaux. Ensuite, l'utilisateur peut imprimer les détails sur la jtable. Après, il est possible de supprimer un élément à partir de la jtable par la sélection d'une ligne.

J'ai 2 problèmes.

Premier problème est que j'ai des erreurs tout en parcourant la liste de tableaux.

Deuxième problème, c'est lorsque l'utilisateur supprime une ligne, l'élément est supprimé de la table, mais je veux aussi supprimer cet élément en particulier à partir de la matrice de trop. De sorte que si l'utilisateur clique sur le bouton imprimer de nouveau, l'élément n'apparaît pas encore.

Problème ici, une Boucle dans arraylist:

model = (DefaultTableModel) table.getModel();
    for (int i=0; i<lib.data.size(); i++){
            book = lib.data.get(i);

    }

    model.addRow(book);

J'ai 3 classes, de Test, de la Bibliothèque et du Livre

De La Classe De Test

 import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;
import javax.swing.border.*;
public class Test extends JFrame{
static Library lib = new Library();
static Book book = new Book();
private JFrame frame = new JFrame("Book");
private JPanel panel = new JPanel();
private JLabel label2, label3;
private JTextField textfield1, textfield2;
private JButton button1, button2, button3;
private DefaultTableModel model;
private JTable table;
private JScrollPane pane;
void form(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
panel.setLayout(null);
model = new DefaultTableModel();
table = new JTable(model);
pane = new JScrollPane(table);
model.addColumn("Title");
model.addColumn("Author");
pane.setBounds(11, 221, 125, 21);
panel.add(pane);
pane.setSize(200, 100);
pane.setVisible(true);
setVisible(false);
setSize(60, 60);
label2 = new JLabel("title:");
label2.setBounds(9, 61, 123, 13);
panel.add(label2);
label3 = new JLabel("author:");
label3.setBounds(9, 91, 123, 13);
panel.add(label3);
textfield1 = new JTextField(10);
textfield1.setBounds(121, 63, 125, 21);
panel.add(textfield1);
textfield2 = new JTextField(10);
textfield2.setBounds(121, 93, 125, 21);
panel.add(textfield2);
button1 = new JButton("Store");
button1.setBounds(351, 226, 125, 21);
panel.add(button1);
button2= new JButton("View");
button2.setBounds(351, 256, 125, 21);
panel.add(button2);
button3= new JButton("Delete");
button3.setBounds(351, 286, 125, 21);
panel.add(button3);
frame.add(panel);
frame.setSize(545,540);
frame.setVisible(true);
//Store
button1.addActionListener(new ActionListener(){
public  void actionPerformed(ActionEvent e){
String title = textfield1.getText();
String author = textfield2.getText();
book = new Book(title, author);
lib.addBook(book);
System.out.println(book);
}
});
//View
button2.addActionListener(new ActionListener(){
public  void actionPerformed(ActionEvent e){
model = (DefaultTableModel) table.getModel();    
String title = textfield1.getText();
String author = textfield2.getText();
book = new Book(title, author);
lib.addBook(book);
book = new Book();
book.setTitle(title);
book.setAuthor(author);
lib.addBook(book);
lib.fireTableDataChanged();
}
});
//Delete
button3.addActionListener(new ActionListener(){
public  void actionPerformed(ActionEvent e){
model = (DefaultTableModel) table.getModel();
int numRows = table.getSelectedRows().length; 
for(int i=0; i<numRows ; i++ ) 
model.removeRow(table.getSelectedRow());
}
});
}
public static void main(String [] args){
Test a = new Test();
a.form();
}
}

Bibliothèque De Classe

   import java.util.*;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
class Library extends AbstractTableModel {
List<Book> data;
String[] columnNames = {"Title", "Author"};
public Library() {
data = new ArrayList<Book>();
//data.add(new Book("Java", "William"));
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Book book = data.get(rowIndex);
switch (columnIndex) {
case 0:
return book.getTitle();
case 1:
return book.getAuthor();
default:
return null;
}
}
public void addBook(Book book){
int firstRow = data.size() - 1;
int lastRow = firstRow;
fireTableRowsInserted(firstRow, lastRow);
data.add(book);
}
public void fireTableDataChanged() {
}   
public void removeBook(Book book){
data.remove(book);
}
}

Livre De Classe

public class Book{
private String title;
private String author;
public Book(){
title = "";
author = "";
}
public Book(String title, String author){
this.title = title;
this.author = author;
}
public String getTitle(){
return title;   
}
public void setTitle(String title){
title = title;  
}
public String getAuthor(){
return author;
}
public void setAuthor(String author){
author = author;
}
public String toString(){
return  "Title: " + getTitle() + "\n" + 
"Author: " + getAuthor() + "\n";
}
}

MODIFIER

C'est ce que j'ai ajouté à ma bibliothèque de classe:

      public void addBook(Book book){
int firstRow = data.size() - 1;
int lastRow = firstRow;
fireTableRowsInserted(firstRow, lastRow);
data.add(book);
}
public void fireTableDataChanged() {
}

C'est ce que j'ai ajouté à ma classe principale (bouton):

           book = new Book();
book.setTitle(title);
book.setAuthor(author);
lib.addBook(book);
lib.fireTableDataChanged();
  • Désolé. J'ai édité le code et posté les erreurs
  • Vous avez oublié d'ajouter les lignes des erreurs.
  • Vous n'êtes toujours pas l'affichage du code d'erreur complet. C'est vous dire plus. Notez que le addRow(...) méthode existe pour DefaultTableModel, mais pas avec un paramètre Bibliothèque. Vous devez soit utiliser un paramètre approprié (consultez l'API de la classe) ou créer votre propre modèle de classe de la classe AbstractTableModel que le tutoriel vous montre.
  • Vous n'avez pas les méthodes définies comme size() et get() dans Library classe. Comme ils ne sont pas disponibles, de sorte que vous ne pouvez pas compiler votre programme. Reportez-vous à répondre par @ Hovercraft Full Of Eels
  • Je l'ai fait. J'ai édité mon code. Pourriez-vous s'il vous plaît dites ce que je dois ajouter dans ma classe principale pour ajouter les valeurs des objets textfield dans ma jtable.