Java中的JTable笔记Word文件下载.docx
- 文档编号:16904917
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:11
- 大小:57.60KB
Java中的JTable笔记Word文件下载.docx
《Java中的JTable笔记Word文件下载.docx》由会员分享,可在线阅读,更多相关《Java中的JTable笔记Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
姓名"
电话"
});
JScrollPanejsp=newJScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
添加到滚动面板的语句也可以这样写,这样滚动条不设置有默认AS_NEEDED
JScrollPanejsp=newJScrollPane();
jsp.setViewportView(table);
3)JTable(TableModelmodel):
使用表格模型model创建一个表格
TableModel是javax.swing.table中的一个接口,这个包中的DefaultTableModel实现了这个接口
publicstaticvoidmain(String[]args){
GUI0807JTabletable=newGUI0807JTable();
String[]columnNames={"
编号"
课程名称"
课程类别"
学分"
课时"
};
String[][]rowData={
{"
001"
语文"
必修"
6"
50"
002"
政治"
5"
30"
003"
英语"
选修"
35"
004"
计算机"
8"
60"
};
DefaultTableModelmodel=newDefaultTableModel(rowData,columnNames);
JTablejTable=newJTable(model);
JScrollPanejsp=newJScrollPane();
jsp.setViewportView(jTable);
table.add(jsp);
table.setBounds(300,150,300,300);
table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
table.setVisible(true);
}
运行结果:
4)JTable(VectordataVector,VectorcolumnVector):
以向量Vector中的元素值作为单元格中数据
以向量columnVector中的元素值作为列名创建一个表格
Vector<
String>
columnVector=newVector<
();
columnVector.add("
年"
);
月"
日"
Vector<
>
dataVector=newVector<
for(inti=1;
i<
=5;
i++){
Vector<
rowVector=newVector<
rowVector.add("
2010"
rowVector.add(String.valueOf(i));
dataVector.add(rowVector);
}
JTablejTable=newJTable(dataVector,columnVector);
运行结果:
常用方法:
getModel()
获得表格所显示数据的表格模式
getRowCount()
获得表格中所显示的数据的行数
getSelectedColumn()
获得表格中第一选择列的索引,如果没有被选择的列,返回-1
getSelectedRow()
获得表格中第一选择行的索引,如果没有被选择的行,返回-1
getValueAt()
获得由指定行索引row和列索引column指定单元格的值
setAutoResizeModel()
设置表格的自动调整模式
setSelectionModel()
设置表格的选择模式
注意:
1、表格的行和列索引都是从0开始的
2、表格的自动调整模式默认开启,调整窗体大小表格自动按比例调整所有列的宽度
JTable例子:
publicclassGUI0807JTable3extendsJFrame{
JTextFieldjtfA,jtfB;
publicGUI0807JTable3(){
String[]columnNames={"
"
};
String[][]rowData={{"
},
{"
},};
finalDefaultTableModelmodel=newDefaultTableModel(rowData,
columnNames);
finalJTablejTable=newJTable(model);
//设置表格的排序器
jTable.setRowSorter(newTableRowSorter<
DefaultTableModel>
(model));
//设置表格的选择模式为单选
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//为表格添加鼠标事件监听器
jTable.addMouseListener(newMouseAdapter(){
//发生了单击事件
publicvoidmouseClicked(MouseEvente){
//获得被选中行的索引
intselectedRow=jTable.getSelectedRow();
//这里提示前面局部jTable必许加final修饰,否则出错
//从表格模型中获得指定值
Objectoa=model.getValueAt(selectedRow,0);
//这里model一样,定义到类里就不需要了。
Objectob=model.getValueAt(selectedRow,1);
//将获得的值赋给文本框
jtfA.setText(oa.toString());
jtfB.setText(ob.toString());
}
});
finalJPaneljPanel=newJPanel();
//把面板添加到窗体下面
this.add(jPanel,BorderLayout.SOUTH);
jPanel.add(newJLabel("
A:
"
));
jtfA=newJTextField("
A4"
5);
jPanel.add(jtfA);
B:
jtfB=newJTextField("
B4"
jPanel.add(jtfB);
finalJButtonjb_add=newJButton("
添加"
jb_add.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//创建表格行数组
String[]rowValues={jtfA.getText(),jtfB.getText()};
//向表格中添加一行
model.addRow(rowValues);
//把表格的总行数加1
introwCount=jTable.getRowCount()+1;
//文本框设置值为A连接总行数加1的值
jtfA.setText("
A"
+rowCount);
jtfB.setText("
B"
jPanel.add(jb_add);
//把按钮添加到面板上
finalJButtonjb_updata=newJButton("
修改"
jb_updata.addActionListener(newActionListener(){
//获得被选中行的索引
if(selectedRow!
=-1){//判断是否存在被选中行
//修改表格模式当中的指定值
model.setValueAt(jtfA.getText(),selectedRow,0);
model.setValueAt(jtfB.getText(),selectedRow,1);
}
jPanel.add(jb_updata);
finalJButtonjb_delete=newJButton("
删除"
jb_delete.addActionListener(newActionListener(){
if(selectedRow!
=-1){
model.removeRow(selectedRow);
jPanel.add(jb_delete);
this.add(jsp,BorderLayout.CENTER);
this.setTitle("
维护表格模型"
this.setBounds(300,150,500,250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
newGUI0807JTable3();
对模型的事件监听与处理
TableModelListener接口可监听模型事件
实现该接口可监控表格的变化
该接口只有一个方法tableChanged()该方法只有一个入口参数TableModelEvent
TableModelEvent的方法有:
getColumn():
返回表格模型中事件的列
getFirstRow():
返回表格模型中第一个被更改的行
getLastRow():
返回表格模型中最后一个被更改的行
getType():
返回事件类型(INSERT、UPDATA和DELETE之一)
通过getType方法判断事件类型,再与TableModelEvent类的常用字段比较,就可以了
常用字段:
TableModelEvent。
DELETE对行或列进行了删除
INSERT添加了新行或新列
UPDATA对现有数据进行了修改
AbstractTableModel
除了数据模型发生变化会触发表格模型事件监听器外,还可以通过AbstractTableModel类提供的方法来触发。
AbstractTableModel类用于触发表格模型事件监听器的常用方法:
voidfireTableCellUpdated(introw,intcolumn)
通知所有侦听器,已更新[row,column]处的单元格值。
voidfireTableChanged(TableModelEvente)
将给定的通知事件转发到所有将自身注册为此表模型的侦听器的TableModelListeners。
voidfireTableDataChanged()
通知所有侦听器,表的所有行单元格值可能已更改。
voidfireTableRowsDeleted(intfirstRow,intlastRow)
通知所有侦听器,已删除范围在[firstRow,lastRow](包括)的行。
voidfireTableRowsInserted(intfirstRow,intlastRow)
通知所有侦听器,已插入范围在[firstRow,lastRow](包括)的行。
voidfireTableRowsUpdated(intfirstRow,intlastRow)
通知所有侦听器,已更新范围在[firstRow,lastRow](包括)的行。
使用AbstractTableModel类触发监听器时,并不是真正对表格模型进行了添加、修改和删除等操作,
只是通过这些方法来通知表格模型的所有监听器,并对事件进行响应处理。
附:
设置JTable的单元格不能被编辑、内容居中显示、隐藏JTable中的某一列
要使单元格不能被编辑,重写tableModel里面的isCellEditable即可,例如:
columnNames){
publicbooleanisCellEditable(introw,intcolumn){
returnfalse;
//使数据局中对齐
DefaultTableCellRendererr=newDefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
jTable.setDefaultRenderer(Object.class,r);
//隐藏表格中第一列
DefaultTableColumnModeldcm=(DefaultTableColumnModel)jTable.getColumnModel();
//获得列模型
dcm.getColumn(0).setMinWidth(0);
//将第一列最大宽度,最小宽度设为0就看不到了
dcm.getColumn(0).setMaxWidth(0);
设置单元格不能被编辑以后就可以在鼠标监听事件里设置双击事件来以其他方式修改单元格的数据了
//双击单元格(这里可以获得行列索引然后操作)
if(e.getClickCount()==2){
intseleRow=jTable.getSelectedRow();
intseleColumn=jTable.getSelectedColumn();
Stringstring=JOptionPane.showInputDialog("
修改为:
"
if(string==null){
return;
}else
if(string.equals("
)){
JOptionPane.showMessageDialog(getContentPane(),"
修改值不能为空!
jTable.setValueAt(string,seleRow,seleColumn);
setValueAt(ObjectaValue,introwIndex,intcolumnIndex)方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 中的 JTable 笔记