java 如何将ArrayList注入JTable,在IntelliJ IDEA中

w7t8yxp5  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(73)

我开始使用IntelliJ IDEA(IDE),我在做一个 Swing 项目。目前我做了一个ArrayList来模拟数据库,看看是否一切正常。我试着像在NetBeans中那样将ArrayList连接到JTable,但是数据没有得到反映。我不知道是否有人能给予我一种方法来注入ArrayList。求你了
由于JTable的特性,我使用IntelliJ编辑器本身创建了它,也就是说,我没有使用任何代码。
我试着像在NetBeans中那样去做,但是没有用。我试着用教程来做,但是也没有用。
这就是ArrayList

public class DatabaseLibros {

    public static ArrayList<Book> books = new ArrayList<>();

    void cargarLibrosDB() {
        Book book;

        // Libro 1
        book = new Book("El señor de los anillos", "J.R.R. Tolkien", "Fantasía", "978-84-450-7570-9");
        books.add(book);

        // Libro 2
        book = new Book("Cien años de soledad", "Gabriel García Márquez", "Realismo mágico", "978-84-376-0374-7");
        books.add(book);

        // Libro 3
        book = new Book("1984", "George Orwell", "Distopía", "978-84-670-5189-7");
        books.add(book);
    }

    // Método para obtener todos los libros de la base de datos
    public static ArrayList<Book> obtenerLibros() {
        return books;
    }

    // Método para agregar un nuevo libro a la base de datos
    public static void agregarLibro(Book nuevoBook) {
        books.add(nuevoBook);
    }
}

字符串
下面是JFrame窗口的逻辑:

public class PantallaPrincipal extends JFrame {

    private JPanel panel;
    private JTextField textField1;
    private JButton button1;
    private JTable jTable;
    private JButton salirButton;
    private JLabel txtLeft;

    public PantallaPrincipal() {
        DefaultTableModel tableModel = new DefaultTableModel(30, 0);
        jTable.setModel(tableModel);

        tableModel.addColumn("Título");
        tableModel.addColumn("Autor");
        tableModel.addColumn("Género");
        tableModel.addColumn("ISBN");

        // Configurar el contenido del JFrame
        add(panel);
        setSize(1280, 720);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        salirButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
                Container principal = new Container();
                principal.setVisible(true);
            }
        });
    }
}

fzwojiic

fzwojiic1#

我建议您从阅读How to Use Tables开始,您还可以从理解Dependency Injectionobserver pattern等概念中受益
就我个人而言,我会从创建一个自定义的TableModel开始,它将接受数据源的一个示例(DatabaseLibros的一个示例)。为此,我会创建一个从AbstractTableModel扩展的类,这样你就可以轻松地配置和重用模型。
例如...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {
        public TestPane() {
            setLayout(new BorderLayout());
            add(new JTable(new BookTableModel(new DatabaseLibros())));
        }
    }

    public class BookTableModel extends AbstractTableModel {
        private String[] columnNames = new String[]{
            "Título",
            "Autor",
            "Género",
            "ISBN"
        };

        private DatabaseLibros database;

        public BookTableModel(DatabaseLibros database) {
            this.database = database;
        }

        @Override
        public int getRowCount() {
            return database.obtenerLibros().size();
        }

        @Override
        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public String getColumnName(int column) {
            return columnNames[column];
        }


        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            Book book = database.obtenerLibros().get(rowIndex);
            switch (columnIndex) {
                case 0: return book.getTitle();
                case 1: return book.getAuthor();
                case 2: return book.getPublisher();
                case 3: return book.getIsbn();
            }
            return null;
        }
    }

    public class Book {
        private String title;
        private String author;
        private String publisher;
        private String isbn;

        public Book(String title, String author, String publisher, String isbn) {
            this.title = title;
            this.author = author;
            this.publisher = publisher;
            this.isbn = isbn;
        }

        public String getTitle() {
            return title;
        }

        public String getAuthor() {
            return author;
        }

        public String getPublisher() {
            return publisher;
        }

        public String getIsbn() {
            return isbn;
        }

    }

    public class DatabaseLibros {
        private ArrayList<Book> books = new ArrayList<>();

        public DatabaseLibros() {
            // Libro 1
            books.add(new Book("El señor de los anillos", "J.R.R. Tolkien", "Fantasía", "978-84-450-7570-9"));

            // Libro 2
            books.add(new Book("Cien años de soledad", "Gabriel García Márquez", "Realismo mágico", "978-84-376-0374-7"));

            // Libro 3
            books.add(new Book("1984", "George Orwell", "Distopía", "978-84-670-5189-7"));
        }

        // Método para obtener todos los libros de la base de datos
        public ArrayList<Book> obtenerLibros() {
            return books;
        }

        // Método para agregar un nuevo libro a la base de datos
        public void agregarLibro(Book nuevoBook) {
            books.add(nuevoBook);
        }
    }
}

字符串
作为一个旁注,我会小心使用static的方式,它很容易回来困扰你。

相关问题