java swing 分页
时间: 2023-07-05 18:27:24 浏览: 194
Java Swing 分页可以通过以下步骤实现:
1. 创建一个包含所有数据的列表或数组。
2. 定义每页显示的记录数。
3. 定义当前页码和总页数的变量。
4. 创建一个 JPanel 并在其中添加一个 JTable。
5. 创建一个 JScrollPane 并将 JTable 添加到其中。
6. 创建一个 JPanel 并在其中添加上一页、下一页和跳转到指定页码的按钮。
7. 点击上一页或下一页按钮时,更新当前页码并刷新表格数据。
8. 点击跳转到指定页码按钮时,更新当前页码并刷新表格数据。
9. 根据当前页码和每页记录数,从列表或数组中获取分页数据并更新 JTable。
以下是一个示例代码:
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class PagingExample extends JFrame implements ActionListener {
private static final int PAGE_SIZE = 10; // 每页显示的记录数
private int currentPage = 1; // 当前页码
private int totalPages; // 总页数
private List<String> data; // 所有数据
private JTable table;
private JButton prevButton;
private JButton nextButton;
private JTextField pageField;
public PagingExample() {
super("分页示例");
// 创建数据列表
data = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
data.add("记录 " + i);
}
// 计算总页数
totalPages = (int) Math.ceil((double) data.size() / PAGE_SIZE);
// 创建表格
String[] headers = {"ID"};
String[][] rows = new String[PAGE_SIZE][1];
table = new JTable(rows, headers);
JScrollPane scrollPane = new JScrollPane(table);
// 创建按钮和文本框
prevButton = new JButton("上一页");
prevButton.addActionListener(this);
nextButton = new JButton("下一页");
nextButton.addActionListener(this);
pageField = new JTextField(5);
// 创建面板并添加组件
JPanel buttonPanel = new JPanel();
buttonPanel.add(prevButton);
buttonPanel.add(nextButton);
buttonPanel.add(new JLabel("跳转到第"));
buttonPanel.add(pageField);
buttonPanel.add(new JLabel("页"));
// 添加组件到窗口
setLayout(new BorderLayout());
add(scrollPane, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
// 初始时显示第一页数据
refreshTable(1);
}
// 更新表格数据
private void refreshTable(int page) {
currentPage = page;
// 计算起始索引和结束索引
int startIndex = (currentPage - 1) * PAGE_SIZE;
int endIndex = Math.min(startIndex + PAGE_SIZE, data.size());
// 更新表格数据
String[][] rows = new String[PAGE_SIZE][1];
for (int i = startIndex; i < endIndex; i++) {
rows[i - startIndex][0] = data.get(i);
}
table.setModel(new javax.swing.table.DefaultTableModel(rows, new String[]{"ID"}));
// 更新总页数和文本框内容
totalPages = (int) Math.ceil((double) data.size() / PAGE_SIZE);
pageField.setText(currentPage + " / " + totalPages);
// 启用或禁用按钮
prevButton.setEnabled(currentPage > 1);
nextButton.setEnabled(currentPage < totalPages);
}
// 处理按钮点击事件
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == prevButton) {
refreshTable(currentPage - 1);
} else if (e.getSource() == nextButton) {
refreshTable(currentPage + 1);
} else if (e.getSource() == pageField) {
try {
int page = Integer.parseInt(pageField.getText());
if (page >= 1 && page <= totalPages) {
refreshTable(page);
}
} catch (NumberFormatException ex) {
// 忽略非法输入
}
}
}
public static void main(String[] args) {
PagingExample frame = new PagingExample();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
```
该示例中包含一个包含 100 条数据的列表,并且每页显示 10 条数据。在窗口中显示一个表格和三个按钮,分别是上一页、下一页和跳转到指定页码。点击按钮时,会更新表格数据并刷新界面。
阅读全文