你看我有一个问题,我开始使用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);
}
});
}
}
我建议您首先阅读如何使用表格。您还将受益于理解诸如依赖注入和观察者模式
之类的概念就个人而言,我会首先创建一个自定义
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
,它很容易再次困扰你。