Gewusst wie: füllen einer jTable aus einer ArrayList?

Das Programm ist gedacht, um die Benutzer-Eingabe und speichern Sie in einer arraylist. Der Benutzer kann dann drucken Sie die details auf der jtable. Nach, er kann Sie entfernen ein Element aus der jtable, indem Sie die entsprechende Zeile auswählen.

Habe ich 2 Probleme.

Erste problem ist, dass ich den Fehler beim Durchlaufen der arraylist.

Zweite problem ist, wenn der Benutzer löscht eine Zeile, wird der Eintrag aus der Tabelle entfernt, aber ich will auch löschen, bestimmte Element aus dem array zu. So dass, wenn der Benutzer klickt auf die Schaltfläche "drucken" erneut, wird das Element nicht mehr angezeigt.

Problem hier, beim Durchlaufen der arraylist:

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

    }

    model.addRow(book);

Ich habe 3 Klassen -, Test -, Library und Book -

Test-Klasse

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


    }

Bibliothek-Klasse

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

Buch Klasse

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";

  }

  }

BEARBEITEN

Dies ist, was ich Hinzugefügt, um meine Bibliothek-Klasse:

      public void addBook(Book book){

    int firstRow = data.size() - 1;
    int lastRow = firstRow;
    fireTableRowsInserted(firstRow, lastRow);
    data.add(book);

}

public void fireTableDataChanged() {

}

Dies ist, was ich Hinzugefügt, um meine main Klasse (Schaltfläche):

           book = new Book();
    book.setTitle(title);
    book.setAuthor(author);
    lib.addBook(book);
    lib.fireTableDataChanged();
Sorry. Ich bearbeitet den code und erzielte den Fehler
Sie vergessen haben, fügen Sie die Zeilen der Fehler.
Du bist immer noch nicht posten Sie die komplette Fehlermeldung. Es sagt Ihnen mehr. Beachten Sie, dass die addRow(...) Methode existiert für DefaultTableModel, aber nicht mit einer Bibliothek parameter. Sie müssen entweder mit einem richtigen parameter (check-out die API für die Klasse) oder erstellen Sie Ihre eigene model-Klasse von der Klasse AbstractTableModel als das tutorial zeigt Ihnen.
Sie haben nicht definierten Methoden, wie size() und get() im Library Klasse. Da Sie nicht verfügbar sind, so können Sie nicht kompilieren Sie Ihr Programm. Siehe Antwort von @ Hovercraft Full Of Eels
Das habe ich getan. Ich bearbeitete meinen code. Könnten Sie mir bitte sagen, was ich brauche, um in meiner main-Klasse um die Werte von Textfeldern in meiner jtable.

InformationsquelleAutor | 

Schreibe einen Kommentar