JTable和TableModel

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 中的值,其列名称为 columnNamesrowData 中包含 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

}
}
  

  通过这种方式将数据和界面分离,更方便我们纠错和修改数据。同时也是代码结构更加清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值