sitinspring原创,转载请注明作者及出处.
JTable是Swing编程中很常用的控件,这里总结了一些常用方法以备查阅.欢迎补充,转载请注明作者与出处.
一.创建表格控件的各种方式:
1)  
调用无参构造函数.
 JTable table = new JTable();
JTable table = new JTable();
2)  
以表头和表数据创建表格.

 Object[][] cellData =
Object[][] cellData =  {
{ {"row1-col1", "row1-col2"},
{"row1-col1", "row1-col2"}, {"row2-col1", "row2-col2"}};
{"row2-col1", "row2-col2"}};

 String[] columnNames =
String[] columnNames =  {"col1", "col2"};
{"col1", "col2"};
 
    
 JTable table = new JTable(cellData, columnNames);
JTable table = new JTable(cellData, columnNames);
3)  
以表头和表数据创建表格,并且让表单元格不可改.

 String[] headers =
String[] headers =  { "表头一", "表头二", "表头三" };
{ "表头一", "表头二", "表头三" };
 Object[][] cellData = null;
Object[][] cellData = null;


 DefaultTableModel model = new DefaultTableModel(cellData, headers)
DefaultTableModel model = new DefaultTableModel(cellData, headers)  {
{


 public boolean isCellEditable(int row, int column)
  public boolean isCellEditable(int row, int column)  {
{
 return false;
    return false;
 }
  }
 };
};

 table = new JTable(model);
table = new JTable(model);
1) 设置列不可随容器组件大小变化自动调整宽度.
 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); TableColumn firsetColumn = table.getColumnModel().getColumn(0);
TableColumn firsetColumn = table.getColumnModel().getColumn(0);
 firsetColumn.setPreferredWidth(30);
firsetColumn.setPreferredWidth(30);
 firsetColumn.setMaxWidth(30);
firsetColumn.setMaxWidth(30);
 firsetColumn.setMinWidth(30);
firsetColumn.setMinWidth(30); DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
 int count=5;
int count=5;
 tableModel.setColumnCount(count);
tableModel.setColumnCount(count); int cols = table.getColumnCount();
int cols = table.getColumnCount(); DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
 tableModel.addColumn("新列名");
tableModel.addColumn("新列名"); table.removeColumn(table.getColumnModel().getColumn(columnIndex));// columnIndex是要删除的列序号
table.removeColumn(table.getColumnModel().getColumn(columnIndex));// columnIndex是要删除的列序号
1) 设置行高
 table.setRowHeight(20);
table.setRowHeight(20); DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
 int n=5;
int n=5;
 tableModel.setRowCount(n);
tableModel.setRowCount(n);
 int rows = table.getRowCount();
int rows = table.getRowCount();

 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

 tableModel.addRow(new Object[]
tableModel.addRow(new Object[] {"sitinspring", "35", "Boss"});
{"sitinspring", "35", "Boss"}); DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
 model.removeRow(rowIndex);// rowIndex是要删除的行序号
model.removeRow(rowIndex);// rowIndex是要删除的行序号
1) 取单元格数据
 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
 String cellValue=(String) tableModel.getValueAt(row, column);// 取单元格数据,row是行号,column是列号
String cellValue=(String) tableModel.getValueAt(row, column);// 取单元格数据,row是行号,column是列号
注:数据是Member类型的链表,Member类如下:

 public class Member
public class Member {
{
 // 名称
    // 名称
 private String name;
    private String name;
 
    
 // 年龄
    // 年龄
 private String age;
    private String age;
 
    
 // 职务
    // 职务
 private String title;
    private String title;
 }
}:

 public void fillTable(List<Member> members)
public void fillTable(List<Member> members) {
{
 DefaultTableModel tableModel = (DefaultTableModel) table
  DefaultTableModel tableModel = (DefaultTableModel) table
 .getModel();
  .getModel();
 tableModel.setRowCount(0);// 清除原有行
  tableModel.setRowCount(0);// 清除原有行
 
  
 // 填充数据
  // 填充数据

 for(Member member:members)
  for(Member member:members) {
{
 String[] arr=new String[3];
    String[] arr=new String[3];
 arr[0]=member.getName();
    arr[0]=member.getName();
 arr[1]=member.getAge();
    arr[1]=member.getAge();
 arr[2]=member.getTitle();
    arr[2]=member.getTitle();
 
    
 // 添加数据到表格
    // 添加数据到表格
 tableModel.addRow(arr);
    tableModel.addRow(arr);
 }
  }
 
  
 // 更新表格
  // 更新表格
 table.invalidate();
  table.invalidate();
 }
}
 public List<Member> getShowMembers()
public List<Member> getShowMembers() {
{
 List<Member> members=new ArrayList<Member>();
  List<Member> members=new ArrayList<Member>();
 
  
 DefaultTableModel tableModel = (DefaultTableModel) table
  DefaultTableModel tableModel = (DefaultTableModel) table
 .getModel();
  .getModel();
 
  
 int rowCount=tableModel.getRowCount();
  int rowCount=tableModel.getRowCount();
 
  

 for(int i=0;i<rowCount;i++)
  for(int i=0;i<rowCount;i++) {
{
 Member member=new Member();
    Member member=new Member();
 
    
 member.setName((String)tableModel.getValueAt(i, 0));// 取得第i行第一列的数据
    member.setName((String)tableModel.getValueAt(i, 0));// 取得第i行第一列的数据
 member.setAge((String)tableModel.getValueAt(i, 1));// 取得第i行第二列的数据
    member.setAge((String)tableModel.getValueAt(i, 1));// 取得第i行第二列的数据
 member.setTitle((String)tableModel.getValueAt(i, 2));// 取得第i行第三列的数据
    member.setTitle((String)tableModel.getValueAt(i, 2));// 取得第i行第三列的数据
 
    
 members.add(member);
    members.add(member);
 }
  }
 
  
 return members;
  return members;
 }
}
1) 取得用户所选的单行
 int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();


 if(selectRows==1)
if(selectRows==1) {
{
 int selectedRowIndex = table.getSelectedRow(); // 取得用户所选单行
  int selectedRowIndex = table.getSelectedRow(); // 取得用户所选单行  
 
  
 
   .// 进行相关处理
.// 进行相关处理
 }
} int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

 if(selectRows>1)
if(selectRows>1)
 int[] selRowIndexs=table.getSelectedRows();// 用户所选行的序列
  int[] selRowIndexs=table.getSelectedRows();// 用户所选行的序列
 
  

 for(int i=0;i<selRowIndexs.length;i++)
  for(int i=0;i<selRowIndexs.length;i++) {
{
 // 用tableModel.getValueAt(row, column)取单元格数据
    // 用tableModel.getValueAt(row, column)取单元格数据
 String cellValue=(String) tableModel.getValueAt(i, 1);
    String cellValue=(String) tableModel.getValueAt(i, 1);
 }
  }
 }
}

 view.getTable().addMouseListener(new MouseListener()
view.getTable().addMouseListener(new MouseListener()  {
{

 public void mousePressed(MouseEvent e)
  public void mousePressed(MouseEvent e)  {
{
 // 鼠标按下时的处理
    // 鼠标按下时的处理
 }
  }


 public void mouseReleased(MouseEvent e)
  public void mouseReleased(MouseEvent e)  {
{
 // 鼠标松开时的处理
    // 鼠标松开时的处理
 }
  }


 public void mouseEntered(MouseEvent e)
  public void mouseEntered(MouseEvent e)  {
{
 // 鼠标进入表格时的处理
    // 鼠标进入表格时的处理
 }
  }


 public void mouseExited(MouseEvent e)
  public void mouseExited(MouseEvent e)  {
{
 // 鼠标退出表格时的处理
    // 鼠标退出表格时的处理
 }
  }


 public void mouseClicked(MouseEvent e)
  public void mouseClicked(MouseEvent e)  {
{
 // 鼠标点击时的处理
    // 鼠标点击时的处理
 }
  }
 });
});