import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
/**
* 维护表格模型
* 实现向JTable表格中添加新数据行,修改表格中某一单元格的值,
* 以及从表格中删除指定的数据行
*/
public class JTableDemo
extends JFrame{
int selectedRow;
public static void main
(String[] args
) {
new JTableDemo().setVisible(true);
}
/**
* 构造方法
*/
public JTableDemo(){
this.setTitle("JTable表格的增、删、改");
this.setVisible(true);
this.
setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
this.setSize(700, 450);
//JFrame窗体居中
this.setLocationRelativeTo(null);
//创建JScrollPane(滚动面板)
//设置JTable中的列名
Vector<String> columnNames = new Vector<>();
columnNames.add("Row-one");
columnNames.add("Row-tow");
columnNames.add("Row-three");
//设置JTable的表格数据
Vector<Vector<String>> tableValues = new Vector<>();
for(int row=1; row<6; row++){
Vector<String> rowV = new Vector<>();
rowV.add("A"+ row);
rowV.add("B"+ row);
rowV.add("C"+ row);
tableValues.add(rowV);
}
//创建JTable (表格)
//创建表格模型
//设置JTable的表格模型
table.setModel(defaultTableModel);
/*
* 将JTable添加到JScrollPane中,
* */
scrollPane.setViewportView(table);
panel.
setBackground(Color.
gray);
panel.add(aTextField);
panel.add(bTextField);
panel.add(cTextField);
panel.add(insertButton);
panel.add(deleteButton);
panel.add(updateButton);
//设置表格的选择模式---为单选模式
/**
* 点击JScrollPane滚动面板,取消选中的行
*/
@Override
//取消掉选中行,但是选中行的索引值还是在的,没有取消掉
table.clearSelection();
//显示选中行的索引值。
System.
out.
println("-----------------"+selectedRow
);
//设置JTextField的默认值
aTextField.setText("A-one");
bTextField.setText("B-two");
cTextField.setText("C-three");
}
});
/**
* 将选中的JTable行的的信息传递给--aTestField、bTextField、cTextField
*/
@Override
//获取到JTable中选定行的---索引值
selectedRow = table.getSelectedRow();
//获取到指定单元格的值
Object oa
= defaultTableModel.
getValueAt(selectedRow,
0);
Object ob
= defaultTableModel.
getValueAt(selectedRow,
1);
Object oc
= defaultTableModel.
getValueAt(selectedRow,
2);
//将获取去到的DefaultTableModel中指定单元格的值,传递给JTextField
aTextField.setText(oa.toString());
bTextField.setText(ob.toString());
cTextField.setText(oc.toString());
}
});
/**
* 删除
*/
@Override
//设置要添加到DefaultTableModel中的---行数据内容
String[] rowValues
= {aTextField.
getText(),
bTextField.getText(), cTextField.getText()};
//在DefaultTableModel---添加行
defaultTableModel.addRow(rowValues);
//设置JTextField的默认值
aTextField.setText("A-one");
bTextField.setText("B-two");
cTextField.setText("C-three");
}
});
/**
* 添加
*/
@Override
//获取到JTable中选定行的---索引值
selectedRow = table.getSelectedRow();
//JTable中行的索引值是从0,1,2.3...开始的,
//只有选中行时,才能修改内容
if(selectedRow != -1){
//删除DefaultTableModel中---指定索引值得行
defaultTableModel.removeRow(selectedRow);
}
}
});
/**
* 修改
*/
@Override
//获取到JTable中选定行的---索引值
selectedRow = table.getSelectedRow();
//JTable中行的索引值是从0,1,2.3...开始的,
//只有选中行时,才能修改内容
if(selectedRow != -1){
//通过获取到JTextField的中的值,来修改指定单元格的内容
defaultTableModel.setValueAt(aTextField.getText(), selectedRow, 0);
defaultTableModel.setValueAt(bTextField.getText(), selectedRow, 1);
defaultTableModel.setValueAt(cTextField.getText(), selectedRow, 2);
}
}
});
}
}