最近帮朋友做了个GUI,其中用到了JTable,这个以前不怎么用,这次因为业务需要查阅资料,学到不少,因为知识点较为零碎,现总结一下,方便以后查阅。
1:表的创建
Object [][]cells=new Object[0][0]; //创建一个初始行列都为0的表
String[] colname={"代码","名称"}; //列名
table=new JTable(cells,colname); //实例化
2:得到当前选中行 int hang=table.getSelectedRow() ;
3: 得到某行某列的字符串形式内容 String str=table.getValueAt(0,0).toString(); //例中得到0行0列的单元格内容
4:添加焦点监听器 addFocusListener(new FocusListener(){});
里面常重写两个方法来实现自己的需求
public void focusGained(FocusEvent e){} //得到焦点时的动作
public void focusLost(FocusEvent e) { //当点击表以外其他可以聚焦的组件时的失去焦点动作
if (!e.isTemporary()) {
jTable1.clearSelection();
}
}
5:比如要使选中行的内容动态的显示在一个文本框中时,因为当在一个表中切换行时焦点始终在表中,文本框不能随着切换而动态改变,只会显示第一次聚焦表时的内容,除非点击别处使表失去焦点再点回表重新获得焦点,文本框才会改变。那么要在表中连续切换行时实现文本框的动态改变怎么办?至今我没有找到好的解决途径,我的方法是每次选中某行触发获得焦点事件的最后使焦点移到表以外的地方,那么即使连续点击其他行,都相当于从表外移进的,文本框都会动态显示。这点要结合4中的监听器如:
jTable1.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e) {
int hang=jTable1.getSelectedRow() ;
txtCode.setText(jTable1.getValueAt(hang,0).toString());
txtDetails.setText(jTable1.getValueAt(hang,1).toString());
txtDetails.requestFocus(true);
}
public void focusLost(FocusEvent e) {
if (!e.isTemporary()) {
jTable1.clearSelection();
}
}
});
6:移出某一行 ((DefaultTableModel)jTable1.getModel()).removeRow(0);//例中为移除第0行
7:得到表的行数 int count=((DefaultTableModel)jTable1.getModel()).getRowCount();
8:给表增加行 ,可用Vector,如:
Vector vector=new Vector();
vector.add(rs.getString(1).toString());
vector.add(rs.getString(2).toString());
((DefaultTableModel)jTable1.getModel()).addRow(vector);
9:使某一行处于高亮被 选中状态
jTable1.setRowSelectionInterval(int n,int m); //使从n行到m行处于被选中状态,如果只选中一行,则n和m值相等。如:jTable1.setRowSelectionInterval(0,0); //使首行选中