JTable是Java.swing包下的一个类,用于显示和编辑常规的二维单元表。它有如下几个构造方法:
1. public JTable() 构造一个默认的 JTable
,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。
2. public JTable(TableModel dm) 构造一个 JTable
,使用数据模型 dm
、默认的列模型和默认的选择模型对其进行初始化。
3. public JTable(TableModel dm,TableColumnModel cm) 构造一个 JTable
,使用数据模型 dm
、列模型 cm
和默认的选择模型对其进行初始化。
4. public JTable(TableModel dm,TableColumnModel cm,ListSelectionModel sm) 构造一个 JTable
,使用数据模型 dm
、列模型 cm
和选择模型 sm
对其进行初始化。如 果任何参数为 null
,则此方法将使用相应的默认模型初始化表。如果 cm
为非 null,则 autoCreateColumnsFromModel
标志被设置为 false,否则设置为 true,并 使用 dm
中各列的合适 TableColumn
来填充列模型。
5. public JTable(int numRows,int numColumns) 使用 DefaultTableModel
构造具有 numRows
行和 numColumns
列个空单元格的 JTable
。列名称采用 "A"、"B"、"C" 等形 式。
6. public JTable(Vector rowData, Vector columnNames) 构造一个 JTable
来显示 Vector
所组成的 Vector
rowData
中的值,其列名称为 columnNames
。rowData
中包含 的 Vector
应该包含该行的值。换句话说,可以通过以下代码获取第 1 行,第 5 列单元格的值:
7. public JTable(Object[][] rowData, Object[] columnNames) 构造一个 JTable
来显示二维数组 rowData
中的值,其列名称为 columnNames
。
TableMode是Java.swing.table下的一个接口,TableModel
接口指定了 JTable
用于询问表格式数据模型的方法。因此在上面的JTable的构造方法中有指定了TableModel参数。只要数据模型实现了 TableModel
接口,就可以通过以下两行代码设置 JTable
显示该模型:
TableModel model = new MyTableModel(); //我们可以自定义一个Model类,只要实现TableModel接口。 JTable table = new JTable(model);TableModel有一下几个常用的方法:
1. getRowCount 返回该模型中的行数。JTable
使用此方法来确定它应该显示多少行。
2. getColumnCount 返回该模型中的列数。JTable使用此方法来确定默认情况下他应该创建并显示多少列。
3. getColumnClass(int columnIndex) 针对列中所有的单元格值,返回最具体的超类。JTable
使用此方法来设置列的默认渲染器和编辑器。
4. Object getValueAt(int rowIndex,int columnIndex) 返回索引位置的对象值。
5. setValueAt(Object ob,int rowIndex,int columnIndex) 设置rowIndex和columnIndex对应位置的单元格值。
6. isCellEditable(int rowIndex,int columnIndex) 设置单元格是否可编辑。
7. getColumnName(int columnIndex) 返回Index位置的列的名称。
其中最常用的方法是前3种方法。
在最近做的小游戏连连看中,我们就是通过自动义TableModel的方式,将图片以及行列等数据信息进行封装。
public class LLK_Model extends MouseAdapter implements TableModel{
String datas[][] = new String[12][13];
public LLK_Model(){
createRandomName();
}
int clickCount = 0;
int firstRow,firstCol,SecondRow,SecondCol;
public void mouseReleased(MouseEvent e){
JTable table = (JTable)e.getSource();
}
//随机产生图片数组
public void createRandomName(){
Random rand = new Random();
for(int i=0;i<datas.length;i++){
for(int j=0;j<datas[0].length;j++){
int index = rand.nextInt(31);
datas[i][j] = "pic/"+index+".gif";
}
}
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return 12;
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 13;
}
@Override
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
// TODO Auto-generated method stub
return ImageIcon.class;//类的类型
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return new ImageIcon(datas[rowIndex][columnIndex]);
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
// JOptionPane.showMessageDialog(null, aValue);
}
@Override
public void addTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
}
@Override
public void removeTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
}
}
通过这种方式将数据和界面分离,更方便我们纠错和修改数据。同时也是代码结构更加清晰。