多语言展示
当前在线:1276今日阅读:75今日分享:44

JTable综合操作案例

本文通过一个简单的demo,让大家学会对JTable的使用,本案例虽然是一个简单的案例,但几乎涉及到了JTable操作的方方面面,学会了本案例,可以为使用Swing编写一个简单管理系统奠定一定的基础。在讲解完最后附上可以运行的完整代码,供大家方便使用,不过,为了加深理解,大家尽量自己完成代码。
工具/原料
1

eclipse

2

Swing/awt

方法/步骤1 表格的显示相关设置
1

初始化一个JTable:该demo整体采用BorderLayout布局,在NORTH方位是一个放置了增删改按钮的面板,在CENTER方位是一个放置表格的滚动面板(将表格放置在滚动面板的目的在于数据量多的时候可以上下翻动查看),为表格初始化两条数据。

2

设置表格某些列居中对齐的方法://设置表格单元格字体居中显示 DefaultTableCellRenderer render = new DefaultTableCellRenderer(); render.setHorizontalAlignment(SwingConstants.CENTER); table.getColumn('学号').setCellRenderer(render); table.getColumn('姓名').setCellRenderer(render);

3

设置表格列宽://设置表格宽度情况 DefaultTableColumnModel dcm = (DefaultTableColumnModel)table.getColumnModel();  dcm.getColumn(0).setPreferredWidth(60); //设置表格显示的最好宽度,即此时表格显示的宽度。 dcm.getColumn(0).setMinWidth(45);//设置表格通过拖动列可以的最小宽度。 dcm.getColumn(0).setMaxWidth(75);//设置表格通过拖动列可以的最大宽度。此时拖动第一列可以发现其最宽可以拖到75,最小只能缩小到45

4

给表格设置行高://给表格设置行高 table.setRowHeight(35);到此为止,和表格显示相关的逻辑写完了。

方法/步骤2 给表格添加相关响应事件

给表格添加鼠标点击事件后,点击表格单元格时,便会触发该事件,给表格添加TableModelEvent事件,当表格内容编辑发生变化后便会执行该事件

方法/步骤3 对表格进行增删改操作
1

给表格增加一条记录

2

给表格删除一条记录

3

给表格更新一条记录

方法/步骤4 完整代码

import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.SwingConstants;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.DefaultTableColumnModel;import javax.swing.table.DefaultTableModel;public class TableDemo extends JFrame implements ActionListener { //操作面板,用于放置增删改按钮 private JPanel controlPanel; //定义表格的数据模型 private DefaultTableModel model; //定义一个表格 private JTable table; //定义一个滚动面板,用于放置表格 private JScrollPane scrollPane; //增删改按钮 private JButton addBtn, deleteBtn, updateBtn; public TableDemo(){ //设置窗口尺寸 setBounds(100, 100, 500, 500); //JTable的表头标题 String[] head = {'学号', '姓名', '班级', '性别'}; //JTable的初始化数据 Object[][] datas = {{'001','张三','班级一','男'}, {'002','李四','班级二','女'}};  //初始化JTable的数据模型 model = new DefaultTableModel(datas, head); //初始化表格 table = new JTable(model); //初始化滚动面板 scrollPane = new JScrollPane(table); //初始化按钮以及添加监听器 addBtn = new JButton('增加'); deleteBtn = new JButton('删除'); updateBtn = new JButton('修改'); addBtn.addActionListener(this); deleteBtn.addActionListener(this); updateBtn.addActionListener(this); //初始化控制面板 controlPanel = new JPanel(); controlPanel.add(addBtn); controlPanel.add(deleteBtn); controlPanel.add(updateBtn); //该窗口使用BorderLayout布局 add(controlPanel, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); //设置表格单元格字体居中显示 DefaultTableCellRenderer render =  new DefaultTableCellRenderer(); render.setHorizontalAlignment(SwingConstants.CENTER); table.getColumn('学号').setCellRenderer(render); table.getColumn('姓名').setCellRenderer(render); //设置表格宽度情况 DefaultTableColumnModel dcm =  (DefaultTableColumnModel)table.getColumnModel();  //设置表格显示的最好宽度,即此时表格显示的宽度。 dcm.getColumn(0).setPreferredWidth(60);  //设置表格通过拖动列可以的最小宽度。 dcm.getColumn(0).setMinWidth(45); //设置表格通过拖动列可以的最大宽度。 dcm.getColumn(0).setMaxWidth(75); //给表格设置行高 table.setRowHeight(35); table.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { int row = table.getSelectedRow(); int col = table.getSelectedColumn(); System.out.println('编辑前:' + table. getValueAt(row, col)); }     }); table.getModel().addTableModelListener( new TableModelListener(){ public void tableChanged(TableModelEvent e) { if(e.getType() == TableModelEvent.UPDATE) { int row = e.getLastRow(); int col = e.getColumn(); System.out.println('编辑后:' +  table.getValueAt(row, col)); } } }); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == addBtn) { model.addRow(new Object[] {'003','王五','班级一','男'}); } else if (e.getSource() == deleteBtn) { int row = table.getSelectedRow(); if (row == -1) { JOptionPane.showMessageDialog(this, '请先选择一条记录!'); return; } model.removeRow(table.getSelectedRow()); } else if (e.getSource() == updateBtn) { int row = table.getSelectedRow(); if (row == -1) { JOptionPane.showMessageDialog(this, '请先选择一条记录!'); return; } table.setValueAt('测试', row, 1); } } public static void main(String[] args){ new TableDemo(); }}

推荐信息