如何在 Intellij Idea 中将 Arraylist 注入到 Jtable 中

问题描述 投票:0回答:1

你看我有一个问题,我开始使用Intellij Idea IDE,我正在做一个Swing类型的项目,目前我做了一个ArrayList来模拟数据库,看看一切是否顺利,尝试连接所说的arraylist像我通常在 Netbeans 中所做的那样到 JTable,但是数据没有反映出来,我不知道是否有人可以给我一种注入该数组列表的方法。

由于JTable是什么,我是使用Intellij编辑器本身创建的,也就是说,我没有使用任何代码。

我尝试像在netbeans中那样做,但它不起作用,我尝试用教程来做,但它也不起作用

这是数组列表:

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

            }
        });
    }
    }
java swing fix-protocol
1个回答
0
投票

我建议您首先阅读如何使用表格。您还将受益于理解诸如依赖注入观察者模式

之类的概念

就个人而言,我会首先创建一个自定义

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
,它很容易再次困扰你。

© www.soinside.com 2019 - 2024. All rights reserved.