import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class DemoJ {
public static void main(String[] args) {
// TODO Auto-generated method stub
PanelTable1 panel = new DemoJ().new PanelTable1();
// 6. 创建窗口并添加滚动面板
JFrame frame = new JFrame("成绩表");
frame.add(panel);
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
//创建表格类
private class PanelTable1 extends JPanel{
PanelTable1(){
setLayout(new GridLayout(2,1));
//1.创建二维数组 ,表格数据
Object [][]data= {{"张三",75,98,87},{"李四",45,56,67},{"王五",66,56,86}};
//2.创建列名数组(表头)
String [] columnsName ={"姓名","语文","数学","英语"};
//3.创建表格模型
DefaultTableModel model = new DefaultTableModel (data,columnsName);
//4.创建JTable
JTable table =new JTable(model);
//5.把表格放在滚动面板里
JScrollPane js = new JScrollPane(table);
//6.添加到面板
add(js);
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
JButton b1 = new JButton("增加");
JButton b2 = new JButton("删除");
JButton b3 = new JButton("修改");
JButton b4 = new JButton("检查");
JLabel label = new JLabel("查询内容");
panel.add(b1);panel.add(b2);panel.add(b3);panel.add(b4);panel.add(label);
add(panel);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.addRow(new Object[] {"赵六",86,52,75});
model.insertRow(1, new Object[] {"赵六",86,52,75});
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.removeRow(1);
}
});
b3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setValueAt(80, 0, 1);
}
});
b4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
label.setText(model.getValueAt(0, 1).toString());
}
});
}
}
}
JTable 是 Java 里用来展示表格数据的 “电子表格小能手”,就像 Excel 表格一样,有行有列,能装各种数据。
二、二维数组是啥?
二维数组就是 “数组套数组”,像个棋盘一样有行有列。
比如,你有 3 个学生的成绩,每个学生有 4 门课的分数,就可以用一个 3 行 4 列 的二维数组来存,就像这样:
// 二维数组 = [行][列]
int[][] scores = {
{90, 85, 95, 100}, // 第1个学生的4门课成绩
{70, 80, 75, 85}, // 第2个学生的4门课成绩
{60, 65, 70, 75} // 第3个学生的4门课成绩
};
scores[0][0]
就是第 1 行第 1 列的数据(90)。scores[1][2]
就是第 2 行第 3 列的数据(75)。- 可以把它想象成一个表格,第一个下标是行号,第二个下标是列号。
用二维数组创建 JTable
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class JTableDemo {
public static void main(String[] args) {
// 1. 创建二维数组数据(表格内容)
Object[][] data = {
{"张三", 20, 90.5},
{"李四", 21, 85.0},
{"王五", 22, 92.3}
};
// 2. 创建列名数组(表头)
String[] columnNames = {"姓名", "年龄", "分数"};
// 3. 创建表格模型(剧本)
DefaultTableModel model = new DefaultTableModel(data, columnNames);
// 4. 创建 JTable(演员按照剧本来表演)
JTable table = new JTable(model);
// 5. 把表格放到滚动面板里(表格太大时可以滚动)
JScrollPane scrollPane = new JScrollPane(table);
// 6. 创建窗口并添加滚动面板
JFrame frame = new JFrame("成绩表");
frame.add(scrollPane);
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
代码解释(超简单版)
-
数据准备:
用二维数组data
存表格内容,每个子数组就是一行数据。 -
列名设置:
columnNames
数组定义表头(第一行)的名称。 -
创建模型:
DefaultTableModel
把数据和列名组合成表格的 “剧本”。 -
创建表格:
JTable
根据模型创建表格,就像演员按照剧本表演一样。 -
添加滚动条:
JScrollPane
让表格可以滚动,防止数据太多显示不全。 -
显示窗口:
最后把表格放到窗口里,搞定!
总结(划重点)
- 二维数组 = 表格数据(行和列)。
- JTable = 展示表格的组件。
- DefaultTableModel = 连接数据和表格的 “桥梁”。
- JScrollPane = 给表格加个滚动条。
****************************************************************************************************************
一、DefaultTableModel 是啥?
想象一下,DefaultTableModel 是 Java 表格世界的「武林盟主」,负责管理 JTable 的数据和规则。
- 它维护着一个「数据仓库」(二维数组)和「表头清单」(一维数组)。
- 所有对表格的增删改查操作,都要通过它来发号施令!
1. 增 = 招兵买马
场景:新增一行数据(比如给表格加个新学生)。
// 方法1:直接添加一行数据(像往花名册里加个新兵)
model.addRow(new Object[]{"赵六", 23, 88.5});
// 方法2:插入到指定位置(比如把新兵安排到第2排)
model.insertRow(1, new Object[]{"田七", 24, 91.0});
2. 删 = 开除弟子
场景:删除一行数据(比如开除某个学生)。
代码:
// 删除第2行(注意:行号从0开始,所以这里删的是表格里的第3行)
model.removeRow(1);
3. 改 = 易容术
场景:修改某个单元格的数据(比如把李四的分数从 85 改成 95)。
代码:
// 把第1行第2列(李四的分数)改成 95.0
model.setValueAt(95.0, 0, 2);
4. 查 = 武林悬赏令
场景:获取某个单元格的数据(比如查看王五的年龄)。
代码:
// 获取第2行第1列(王五的年龄)
Object age = model.getValueAt(1, 1);
System.out.println("王五的年龄是:" + age);
查看数据规模
int rowCount = model.getRowCount(); // 查看有多少行(多少学生)
int columnCount = model.getColumnCount(); // 查看有多少列(多少信息字段)
修改表头
// 把第3列的表头从「分数」改成「期末成绩」
model.setColumnName(2, "期末成绩");
. 清空表格(大清洗)
// 方法1:一行一行删(适合慢慢清理)
while (model.getRowCount() > 0) {
model.removeRow(0);
}
// 方法2:直接重置(适合一键清空)
model.setRowCount(0);
- DefaultTableModel 是 JTable 的「指挥官」,控制数据的增删改查。
- 增:
addRow()
或insertRow()
。 - 删:
removeRow()
。 - 改:
setValueAt()
。 - 查:
getValueAt()
。