
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{ |
private JTextField aTextField; |
private JTextField bTextField; |
private JTextField cTextField; |
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(滚动面板) |
final JScrollPane scrollPane = new JScrollPane(); |
this.getContentPane().add(scrollPane, BorderLayout.CENTER); |
//设置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 = new JTable(); |
//创建表格模型 |
DefaultTableModel defaultTableModel = new DefaultTableModel(tableValues, columnNames); |
//设置JTable的表格模型 |
table.setModel(defaultTableModel); |
/* |
* 将JTable添加到JScrollPane中, |
* */ |
scrollPane.setViewportView(table); |
|
final JPanel panel = new JPanel(); |
panel.setBackground(Color.gray); |
this.getContentPane().add(panel, BorderLayout.SOUTH); |
panel.add(new JLabel("A: ")); |
aTextField = new JTextField("A-one", 10); |
panel.add(aTextField); |
panel.add(new JLabel("B: ")); |
bTextField = new JTextField("B-tow", 10); |
panel.add(bTextField); |
panel.add(new JLabel("C: ")); |
cTextField = new JTextField("C-three", 10); |
panel.add(cTextField); |
|
JButton insertButton = new JButton("添加"); |
JButton deleteButton = new JButton("删除"); |
JButton updateButton = new JButton("修改"); |
panel.add(insertButton); |
panel.add(deleteButton); |
panel.add(updateButton); |
|
//设置表格的选择模式---为单选模式 |
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); |
|
|
/** |
* 点击JScrollPane滚动面板,取消选中的行 |
*/ |
scrollPane.addMouseListener(new MouseAdapter() { |
@Override |
public void mouseClicked(MouseEvent e) { |
//取消掉选中行,但是选中行的索引值还是在的,没有取消掉 |
table.clearSelection(); |
//显示选中行的索引值。 |
System.out.println("-----------------"+selectedRow); |
|
|
//设置JTextField的默认值 |
aTextField.setText("A-one"); |
bTextField.setText("B-two"); |
cTextField.setText("C-three"); |
} |
}); |
|
|
/** |
* 将选中的JTable行的的信息传递给--aTestField、bTextField、cTextField |
*/ |
table.addMouseListener(new MouseAdapter() { |
@Override |
public void mouseClicked(MouseEvent e) { |
//获取到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()); |
} |
}); |
|
|
/** |
* 删除 |
*/ |
insertButton.addActionListener(new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) { |
//设置要添加到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"); |
} |
}); |
|
|
/** |
* 添加 |
*/ |
deleteButton.addActionListener(new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) { |
//获取到JTable中选定行的---索引值 |
selectedRow = table.getSelectedRow(); |
//JTable中行的索引值是从0,1,2.3...开始的, |
//只有选中行时,才能修改内容 |
if(selectedRow != -1){ |
//删除DefaultTableModel中---指定索引值得行 |
defaultTableModel.removeRow(selectedRow); |
} |
} |
}); |
|
|
/** |
* 修改 |
*/ |
updateButton.addActionListener(new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) { |
//获取到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); |
} |
} |
}); |
|
} |
|
} |




中级程序员
by: 陆痴 发表于:2017-04-25 21:23:36 顶(0) | 踩(0) 回复
用来创建的表格的JTable类并不负责存储表格中的数据,而是表格模型负责存储。当利用JTable类直接创建表格是,只是将数据封装到默认的表格模型中。


程序刚开始运行时:
增、删、改数据后的:
回复评论