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类直接创建表格是,只是将数据封装到默认的表格模型中。


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