流程

JTable简单结构:

1:声明列名表头Object[]数组:
Object[] columnNames = {"姓名","语文","数学","英语","总分"};

2:表格所有数据Object[][]二维数组:
Object[][] row= {
		{"乔布斯","30","120","100","250"},
		{"马化腾","40","98","60","198"},
		{"马云晕","100","110","98","308"},
		{"柳传志","70","70","78","218"},
		{"董明珠","90","20","69","179"},
		{"乔布斯","30","120","100","250"},
		{"马化腾","40","98","60","198"},
		{"马云晕","100","110","98","308"},
		{"柳传志","70","70","78","218"},
		{"董明珠","90","20","69","179"},
		{"乔布斯","30","120","100","250"},
		{"马化腾","40","98","60","198"},
		{"马云晕","100","110","98","308"},
		{"柳传志","70","70","78","218"},
		{"董明珠","90","20","69","179"}
       };

3:创建一个表格把所有数据和表头加入其中:
JTable table=new JTable(row,columnNames);

4:把表格放入滚动条组件JScroolPane,然后把JScrollPane 放入面板中JPanel,最后把面板放到框架内JFrame并显示。
JPanel jp1=new JPanel(new BorderLayout());
JScrollPane jsp=new JScrollPane(table);
jp1.add(jsp,BorderLayout.CENTER);
this.setContentPane(jp1);
this.pack();
this.setLocation(300,300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setTitle("Java表格练习");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

运行结果

代码

package jTable;
import javax.swing.*;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import java.awt.*;
public class jTable extends JFrame {
JPanel jp1;
JScrollPane jsp;
public static void main(String[] args) {
   new jTable();
}
public jTable() {
//		创建内容面板使用边界布局
	jp1= new JPanel(new BorderLayout());
//		表头
	Object[] columnNames = {"姓名","语文","数学","英语","总分"};
//		表格所有数据
	Object[][] row= {
			{"乔布斯","30","120","100","250"},
			{"马化腾","40","98","60","198"},
			{"马云晕","100","110","98","308"},
			{"柳传志","70","70","78","218"},
			{"董明珠","90","20","69","179"},
			{"乔布斯","30","120","100","250"},
			{"马化腾","40","98","60","198"},
			{"马云晕","100","110","98","308"},
			{"柳传志","70","70","78","218"},
			{"董明珠","90","20","69","179"},
			{"乔布斯","30","120","100","250"},
			{"马化腾","40","98","60","198"},
			{"马云晕","100","110","98","308"},
			{"柳传志","70","70","78","218"},
				{"董明珠","90","20","69","179"}
	};
//		创建一个表格制定所有数据和表头
	JTable table=new JTable(row,columnNames);
//		是否显示网格,默认是显示的,true显示,false不显示
//		table.setShowGrid(false);
//		表格颜色
//		table.setFont(new Font("黑体",Font.BOLD,14));
//		表格背景色
//		table.setBackground(Color.red);
//		表格前景色
//		table.setForeground(Color.red);
//		表格选中背景色
//		table.setSelectionBackground(Color.gray);
//		表格选中前景色
//		table.setSelectionForeground(Color.red);
//		表格网格颜色
//		table.setGridColor(Color.red);
//		表格水平方向网格是否显示
//		table.setShowHorizontalLines(false);
//		表格竖直方向网格是否显示
//		table.setShowVerticalLines(false);
		
//		获取表头
//		JTableHeader jtbh=table.getTableHeader();
//		设置表头字体样式
//		jtbh.setFont(new Font("宋体",Font.BOLD,14));
//		设置表头字体颜色
//		jtbh.setForeground(Color.red);
//		设置用户是否可以拖动调整各列大小
//		jtbh.setResizingAllowed(true);
//		设置是否可以拖动整列,重新排序
//		jtbh.setReorderingAllowed(true);
		
//		设置表格行的高度
//		table.setRowHeight(30);
//		设置指定行高度0,1,2,3,4,5,6
//		table.setRowHeight(3, 30);
//		表格列属性操作
//		TableColumn tc=table.getColumnModel().getColumn(4);
//		tc.setWidth(30);
//		tc.setPreferredWidth(50);
//		tc.setMinWidth(10);
//		tc.setResizable(true);
////		tc.setHeaderValue("英语");
		
//		指定某行某列的值
//		table.getModel().setValueAt("指定值", 3, 3);
//		获取指定单元格的数据
//		Object value=table.getModel().getValueAt(2,2);

	
//		滚动容器不需要另外添加表头
	jsp=new JScrollPane(table);
	jp1.add(jsp,BorderLayout.CENTER);
//		把表头添加到容器顶部【表头和内容要分别添加】
//		jp1.add(table.getTableHeader(),BorderLayout.NORTH);
//		将表格内容添加到容器中心
//		jp1.add(table,BorderLayout.CENTER);
		
//		TableModel 接口中的方法:
//		TableModel myD = new MyTableModel(); 
//		JTable table = new JTable(myDa);
//		//			    /** 返回总行数 */
//			    public int getRowCount();
////			    /** 返回总列数 */
//			    public int getColumnCount();
////			    /** 返回指定列的名称(表头名称) */
//			    public String getColumnName(int columnIndex);
////	/** 针对列中所有的单元格值,返回最具体的超类。JTable 使用此方法来设置列的默认渲染器和编辑器。   */
//			    public Class<?> getColumnClass(int columnIndex);
////			    /** 判断指定单元格是否可编辑 */
//			    public boolean isCellEditable(int rowIndex, int columnIndex);
////			    /** 获取指定单元格的值 */
//			    public Object getValueAt(int rowIndex, int columnIndex);
////			    /** 设置指定单元格的值 */
//			    public void setValueAt(Object aValue, int rowIndex, int columnIndex);
////			    /** 添加表格模型监听器 */
//			    public void addTableModelListener(TableModelListener l);
////			    /** 移除表格模型监听器 */
//			    public void removeTableModelListener(TableModelListener l);
//			}
//		  // 创建内容面板,使用边界布局
//        JPanel panel = new JPanel(new BorderLayout());
//
//        // 使用表格模型创建一个表格
//        JTable table = new JTable(new MyTableModel());
//
//        // 把 表头 添加到容器顶部(使用普通的中间容器添加表格时,表头 和 内容 需要分开添加)
//        panel.add(table.getTableHeader(), BorderLayout.NORTH);
//        // 把 表格内容 添加到容器中心
//        panel.add(table, BorderLayout.CENTER);
//		
//		设置表格模型监听器主要代码:
//		// 先获取 表格模型 对象
//		TableModel tableModel = table.getModel();
//		// 在 表格模型上 添加 数据改变监听器
//		tableModel.addTableModelListener(new TableModelListener() {
//		    public void tableChanged(TableModelEvent e) {
//		        // 第一个 和 最后一个 被改变的行(只改变了一行,则两者相同)
//		        int firstRow = e.getFirstRow();
//		        int lastRow = e.getLastRow();
//		        // 被改变的列
//		        int column = e.getColumn();
//		        // 事件的类型,可能的值有:
//		        //     TableModelEvent.INSERT   新行或新列的添加
//		        //     TableModelEvent.UPDATE   现有数据的更改
//		        //     TableModelEvent.DELETE   有行或列被移除
//		        int type = e.getType();
//		    }
//		});

//		表格选择器(ListSelectionModel)
//		ListSelectionModel 的使用:
//			// 创建表格
//			final JTable table = new JTable(...);
//
//			// 设置是否允许单元格单个选中,默认为 false
//			table.setCellSelectionEnabled(boolean cellSelectionEnabled);
//
//			// 首先通过表格对象 table 获取选择器模型
//			ListSelectionModel selectionModel = table.getSelectionModel();
//
//			// 设置选择器模式,参数可能的值为:
////			     ListSelectionModel.MULTIPLE_INTERVAL_SELECTION   一次选择一个或多个连续的索引范围(默认)
////			     ListSelectionModel.SINGLE_INTERVAL_SELECTION     一次选择一个连续的索引范围
////			     ListSelectionModel.SINGLE_SELECTION              一次只能选择一个列表索引
//			selectionModel.setSelectionMode(int selectionMode);
//
//			// 添加选择模型监听器(选中状态改变时回调)
//			selectionModel.addListSelectionListener(new ListSelectionListener() {
//			    @Override
//			    public void valueChanged(ListSelectionEvent e) {
//			        // 获取选中的第一行
//			        int selectedRow = table.getSelectedRow();
//			        
//			        // 获取选中的第一列
//			        int selectedRow = table.getSelectedColumn();        
//			        
//			        // 获取选中的所有行
//			        int[] selectedRows = table.getSelectedRows();
//			        
//			        // 获取选中的所有列
//			        int[] selectedColumns = table.getSelectedColumns(); 

//		单元格的渲染器(TableCellRenderer)
//		  // 创建一个表格,指定 所有行数据 和 表头
//        JTable table = new JTable(rowData, columnNames);
//
//        // 创建单元格渲染器
//        MyTableCellRenderer renderer = new MyTableCellRenderer();
//
//        // 遍历表格的每一列,分别给每一列设置单元格渲染器
//        for (int i = 0; i < columnNames.length; i++) {
//            // 根据 列名 获取 表格列
//            TableColumn tableColumn = table.getColumn(columnNames[i]);
//            // 设置 表格列 的 单元格渲染器
//            tableColumn.setCellRenderer(renderer);
//        }
//
//        // 如果需要自定义表头样式,也可以给表头设置一个自定义渲染器
//        // table.getTableHeader().setDefaultRenderer(headerRenderer);
//		 public boolean stopCellEditing() {
//	            // 获取当前单元格的编辑器组件
//	            Component comp = getComponent();
//
//	            // 获取当前单元格编辑器输入的值
//	            Object obj = getCellEditorValue();
//
//	            // 如果当前单元格编辑器输入的值不是数字,则返回 false(表示数据非法,不允许设置,无法保存)
//	            if (obj == null || !obj.toString().matches("[0-9]*")) {
//	                // 数据非法时,设置编辑器组件内的内容颜色为红色
//	                comp.setForeground(Color.RED);
//	                return false;
//	            }
//
//	            // 数据合法时,设置编辑器组件内的内容颜色为黑色
//	            comp.setForeground(Color.BLACK);
//
//	            // 合法数据交给父类处理
//	            return super.stopCellEditing();
//	        }
//	
		
//		
//		表格数据的排序(RowSorter)
//		   // 创建 表格模型,指定 所有行数据 和 表头
//        TableModel tableModel = new DefaultTableModel(rowData, columnNames);
//
//        // 使用 表格模型 创建 表格
//        JTable table = new JTable(tableModel);
//
//        // 使用 表格模型 创建 行排序器(TableRowSorter 实现了 RowSorter)
//        RowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(tableModel);
//
//        // 给 表格 设置 行排序器
//        table.setRowSorter(rowSorter);
//
//        // 把 表头 添加到容器顶部(使用普通的中间容器添加表格时,表头 和 内容 需要分开添加)
//        panel.add(table.getTableHeader(), BorderLayout.NORTH);
//        // 把 表格内容 添加到容器中心
//        panel.add(table, BorderLayout.CENTER);

//
//        // 把 表头 添加到容器顶部(使用普通的中间容器添加表格时,表头 和 内容 需要分开添加)
//        panel.add(table.getTableHeader(), BorderLayout.NORTH);
//        // 把 表格内容 添加到容器中心
//        panel.add(table, BorderLayout.CENTER);

		
		this.setContentPane(jp1);
	this.pack();
	this.setLocation(300,300);
	this.setLocationRelativeTo(null);
	this.setVisible(true);
	this.setTitle("Java表格练习");
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}