实验7java表格.docx
《实验7java表格.docx》由会员分享,可在线阅读,更多相关《实验7java表格.docx(14页珍藏版)》请在冰豆网上搜索。
![实验7java表格.docx](https://file1.bdocx.com/fileroot1/2023-7/5/9fecc8fa-8f85-4984-a1e7-d5edb9b57ac6/9fecc8fa-8f85-4984-a1e7-d5edb9b57ac61.gif)
实验7java表格
实验七:
表格
实验说明:
该例子实现一个商品价格管理的表格,开始会出现商品1~5的30天的不同的价格,用户可以在对应的文本框内输入数据,对表格进行数据的增加,插入,修改和删除,此外,还设置了一个“取消选择”按钮,可以取消用户当前的选择,使操作方便;每一次表格的改变,都会通知表格模型监听器,并在命令行输出表格的具体改变位置。
运行结果:
1.开始界面
2.在文本框中输入个数据,在表格尾部进行添加
3.点击“添加按钮”,数据添加到表格中,此时,各文本框中的数据置空
4.选中第1,3行
5.点击“删除按钮”后,1、3行被删除
6.选中第一行(日期为2),在文本框中输入数据
7.点击“添加”按钮,则新数据被插入到第一行
8.点击取消选择
9.选中第二行,在文本框中输入数据
10.点击“修改按钮”,则数据第二行数据被更新
命令行的输出:
源代码:
importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.Point;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.InputEvent;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.util.Arrays;
importjava.util.Vector;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.JTextField;
importjavax.swing.ListSelectionModel;
importjavax.swing.event.TableModelEvent;
importjavax.swing.event.TableModelListener;
importjavax.swing.table.DefaultTableModel;
importjavax.swing.table.JTableHeader;
importjavax.swing.table.TableColumnModel;
importjavax.swing.table.*;
publicclassTableTestextendsJFrame{
publicstaticvoidmain(String[]args){
TableTestframe=newTableTest();
frame.setTitle("表格模型事件示例");
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
publicTableTest(){
Containercontainer=getContentPane();
VectortableColumnNames=newVector();//定义表格列名向量
tableColumnNames.add("日期");//向列名向量中加入“日期”
for(inti=1;i<=5;i++){
tableColumnNames.add("商品"+i);//依次向列名向量中加入商品1~5
}
Vector>tableValues=newVector>();//定义二维数据向量
for(inti=1;i<=30;i++){
VectorrowV=newVector();//定义一维行向量rowV
rowV.add(""+i);//向rowV中加入日期
for(intj=1;j<=5;j++){
rowV.add(""+(int)(Math.random()*1000));//向rowV中加入5个1~1000的随机数
}
tableValues.add(rowV);
}
/*创建表格模型TableModel,并设置其不可编辑*/
finalDefaultTableModelTableModel=newDefaultTableModel(tableValues,tableColumnNames){
publicbooleanisCellEditable(introw,intcolum){
returnfalse;
}
};
finalJTabletable=newJTable(TableModel);//创建指定表格模型的表格
JScrollPanescrollPane=newJScrollPane();
scrollPane.setViewportView(table);
container.add(scrollPane,BorderLayout.CENTER);//将表格加入到窗体中央
JPanelpanel=newJPanel();
container.add(panel,BorderLayout.SOUTH);//将面板加入到窗体下面
/*创建所要用到的标签,文本框和按钮*/
JLabellabeldata=newJLabel("日期:
");
finalJTextFieldtextFielddata=newJTextField(5);
JLabellabel1=newJLabel("商品1:
");
finalJTextFieldtextField1=newJTextField(5);
JLabellabel2=newJLabel("商品2:
");
finalJTextFieldtextField2=newJTextField(5);
JLabellabel3=newJLabel("商品3:
");
finalJTextFieldtextField3=newJTextField(5);
JLabellabel4=newJLabel("商品4:
");
finalJTextFieldtextField4=newJTextField(5);
JLabellabel5=newJLabel("商品5:
");
finalJTextFieldtextField5=newJTextField(5);
JButtonbuttonAdd=newJButton("添加");
JButtonbuttonDel=newJButton("删除");
JButtonbuttonUpd=newJButton("修改");
JButtonbuttonDeselected=newJButton("取消选择");
/*将创建好的标签、文本框和按钮按顺序加入到面板中*/
panel.add(labeldata);
panel.add(textFielddata);
panel.add(label1);
panel.add(textField1);
panel.add(label2);
panel.add(textField2);
panel.add(label3);
panel.add(textField3);
panel.add(label4);
panel.add(textField4);
panel.add(label5);
panel.add(textField5);
panel.add(buttonAdd);
panel.add(buttonDel);
panel.add(buttonUpd);
panel.add(buttonDeselected);
/*为增加按钮添加事件*/
buttonAdd.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intselectedRows[]=table.getSelectedRows();//获得选中的行数组
VectorrowData=newVector();//定义行数据向量
/*获得文本框的数据,并添加到rowData中*/
rowData.add(textFielddata.getText());
rowData.add(textField1.getText());
rowData.add(textField2.getText());
rowData.add(textField3.getText());
rowData.add(textField4.getText());
rowData.add(textField5.getText());
if(selectedRows.length==0){
TableModel.addRow(rowData);//如果没有选中任意一行,则直接添加到表格的末尾
}else{
TableModel.insertRow(selectedRows[0],rowData);//否则将rowData添加到选中行
}
/*添加完成后,将各个文本框设置为空*/
textFielddata.setText(null);
textField1.setText(null);
textField2.setText(null);
textField3.setText(null);
textField4.setText(null);
textField5.setText(null);
}
});
/*为删除按钮添加事件*/
buttonDel.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
int[]selectedRows=table.getSelectedRows();//获得选中的行数组
for(inti=0;iTableModel.removeRow(selectedRows[i]-i);//逐一删除选中的行
}
}
});
/*为修改按钮添加事件*/
buttonUpd.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
intselectedRow=table.getSelectedRow();//获得选中的行
if(selectedRow!
=-1){
/*逐一获得文本框的内容并添加到对应的表格中*/
TableModel.setValueAt(textFielddata.getText(),selectedRow,0);
TableModel.setValueAt(textField1.getText(),selectedRow,1);
TableModel.setValueAt(textField2.getText(),selectedRow,2);
TableModel.setValueAt(textField3.getText(),selectedRow,3);
TableModel.setValueAt(textField4.getText(),selectedRow,4);
TableModel.setValueAt(textField5.getText(),selectedRow,5);
textFielddata.setText(null);
textField1.setText(null);
textField2.setText(null);
textField3.setText(null);
textField4.setText(null);
textField5.setText(null);
}
}
});
/*为取消选择按钮添加事件*/
buttonDeselected.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
table.clearSelection();
}
});
/*为表格添加表格模型事件*/
TableModel.addTableModelListener(newTableModelListener(){
publicvoidtableChanged(TableModelEvente){
/*表格发生了什么变化,将其打印到命令行中*/
inttype=e.getType();
intfirstRow=e.getFirstRow();
intcolumn=e.getColumn();
switch(type){
caseTableModelEvent.DELETE:
System.out.print("此次事件由删除行触发:
");
System.out.println("此次删除的是第"+firstRow+"行");
break;
caseTableModelEvent.INSERT:
System.out.print("此次事件由插入行触发:
");
System.out.println("此次插入的是第"+firstRow+"行");
break;
caseTableModelEvent.UPDATE:
System.out.print("此次事件由更新行触发:
");
System.out.println("此次更新的是第"+firstRow+"行第"+column+"列");
break;
default:
System.out.println("此次事件由其他原因触发");
}
}
});
}
}