JTable 的使用指南

参考为官方文档,官方文档写的非常好,但是因为他的代码是七零八落的,所以我想写一篇博客,将代码汇总。
Create a simple table

import javax.swing.*; import java.awt.*; public class CreateJTable { private JFrame container; private JTable jTable; public CreateJTable(){ String [] columnName = { "name", "age" }; Object [][] data=https://www.it610.com/article/{ {"zhp",20}, {"zyh",21}, {"zk",22} }; jTable=new JTable(data,columnName); JScrollPane jScrollPane = new JScrollPane(); jScrollPane.setViewportView(jTable); container = new JFrame("JTable Test1"); container.setSize(800,600); container.setLayout(new BorderLayout()); container.add(jScrollPane,BorderLayout.CENTER); container.setVisible(true); } public static void main(String [] args){ CreateJTable createJTable = new CreateJTable(); } }

JTable 的使用指南
文章图片

Add a Table to a Container 为什么要将JTable放入一个容器中呢?因为如果只是一个单独的JTable是不会显示表格头,想要显示可以手动添加,或者将JTable放入一个容器中,让容器自动添加。
手动添加的方式
container.setLayout(new BorderLayout()); container.add(table.getTableHeader(), BorderLayout.PAGE_START); container.add(table, BorderLayout.CENTER);

自动添加的方式
JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true);

Setting and Changing Column Widths 默认情况下,JTable表格的每一列宽度相同,请看第一张图。但是现在我希望有一些列的长度变化,怎么办?使用setPreferredWidth()方法
TableColumn column = null; for (int i = 0; i < 2; i++) { column = table.getColumnModel().getColumn(i); //获得每一列 if (i == 0) { column.setPreferredWidth(100); //设置第1列的宽度 } else { column.setPreferredWidth(50); //设置其他列的宽度 } }

JTable 的使用指南
文章图片

现在列宽是不一样的了,注意如果你的总列宽要比,所有列的宽度总和要大的话,这样的设置是不起作用的,比如说我设定jTable的宽度为800,然后我让第一列宽为100,第二列宽为50,这样的设定根本不会起作用。
User Selection Creating a Table Model 每一个JTable对象必须要使用TableModel,你可能说在上面的例子中我也没有写什么TableModel啊,那是因为系统帮你代劳了(如果程序中没有TableModel对象,那么它会被自动创建为默认模式)
TableModel是用来干什么的呢?
我们来看一看默认的TableModel中含有那些方法:
new AbstractTableModel() { public String getColumnName(int col) { return columnNames[col].toString(); } public int getRowCount() { return rowData.length; } public int getColumnCount() { return columnNames.length; } public Object getValueAt(int row, int col) { return rowData[row][col]; } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { rowData[row][col] = value; fireTableCellUpdated(row, col); } }

我们看到都是一些常规的方法,如getColumnName为获得列名,getRowCount获得行数,getColumnCount获得列数,getValueAt获得某行某列的值,isCellEditable设定可被修改,setValueAt设定某行某列的值。
在TableModel中还可以干什么呢?你可以规定数据存放在哪里,可以是数组、向量或者HashMap,也可以从数据库中获得数据。
现在让我们更新一下我们的JTable吧!
import javax.swing.*; import javax.swing.table.AbstractTableModel; import java.awt.*; public class JTableModel { private JFrame jFrame; private JTable jTable; public JTableModel(){ jTable = new JTable(new MyTableModel()); jFrame = new JFrame("JTableModel Test"); jFrame.setSize(800,600); jFrame.setLayout(new BorderLayout()); jFrame.add(jTable,BorderLayout.CENTER); jFrame.setVisible(true); } class MyTableModel extends AbstractTableModel{ private String [] columnName={"name","age"}; private String [][] data=https://www.it610.com/article/{ {"zhp","20"}, {"zyh","21"}, {"zk","22"} }; @Override public int getRowCount() { return data.length; }@Override public int getColumnCount() { return columnName.length; }@Override public Object getValueAt(int rowIndex, int columnIndex) { return data[rowIndex][columnIndex]; } } public static void main(String [] args){ JTableModel jTableModel = new JTableModel(); } }

【JTable 的使用指南】这样写也让我们的代码更加有条理了!

    推荐阅读