[Java] JTable的表格维护----增、删、改。 →→→→→进入此内容的聊天室

来自 , 2021-01-18, 写在 Java, 查看 127 次.
URL http://www.code666.cn/view/99adff45
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.MouseAdapter;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseListener;
  8. import java.util.Vector;
  9.  
  10. import javax.swing.JButton;
  11. import javax.swing.JFrame;
  12. import javax.swing.JLabel;
  13. import javax.swing.JPanel;
  14. import javax.swing.JScrollPane;
  15. import javax.swing.JTable;
  16. import javax.swing.JTextField;
  17. import javax.swing.ListSelectionModel;
  18. import javax.swing.table.DefaultTableModel;
  19.  
  20. /**
  21.  * 维护表格模型
  22.  * 实现向JTable表格中添加新数据行,修改表格中某一单元格的值,
  23.  * 以及从表格中删除指定的数据行
  24.  */
  25. public class JTableDemo extends JFrame{
  26.         private JTextField aTextField;
  27.         private JTextField bTextField;
  28.         private JTextField cTextField;
  29.         int selectedRow;
  30.        
  31.         public static void main(String[] args) {
  32.                 new JTableDemo().setVisible(true);
  33.         }
  34.        
  35.         /**
  36.          * 构造方法
  37.          */
  38.         public JTableDemo(){
  39.                 this.setTitle("JTable表格的增、删、改");
  40.                 this.setVisible(true);
  41.                 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  42.                 this.setSize(700, 450);
  43.                 //JFrame窗体居中
  44.                 this.setLocationRelativeTo(null);
  45.                
  46.                 //创建JScrollPane(滚动面板)
  47.                 final JScrollPane scrollPane = new JScrollPane();
  48.                 this.getContentPane().add(scrollPane, BorderLayout.CENTER);
  49.                 //设置JTable中的列名
  50.                 Vector<String> columnNames = new Vector<>();
  51.                 columnNames.add("Row-one");
  52.                 columnNames.add("Row-tow");
  53.                 columnNames.add("Row-three");
  54.                 //设置JTable的表格数据
  55.                 Vector<Vector<String>> tableValues = new Vector<>();
  56.                 for(int row=1; row<6; row++){
  57.                         Vector<String> rowV = new Vector<>();
  58.                         rowV.add("A"+ row);
  59.                         rowV.add("B"+ row);
  60.                         rowV.add("C"+ row);
  61.                         tableValues.add(rowV);
  62.                 }
  63.                 //创建JTable (表格)
  64.                 JTable table = new JTable();
  65.                 //创建表格模型
  66.                 DefaultTableModel defaultTableModel = new DefaultTableModel(tableValues, columnNames);
  67.                 //设置JTable的表格模型
  68.                 table.setModel(defaultTableModel);
  69.                 /*
  70.                  * 将JTable添加到JScrollPane中,
  71.                  * */
  72.                 scrollPane.setViewportView(table);
  73.                
  74.                 final JPanel panel = new JPanel();
  75.                 panel.setBackground(Color.gray);
  76.                 this.getContentPane().add(panel, BorderLayout.SOUTH);
  77.                 panel.add(new JLabel("A: "));
  78.                 aTextField = new JTextField("A-one", 10);
  79.                 panel.add(aTextField);
  80.                 panel.add(new JLabel("B: "));
  81.                 bTextField = new JTextField("B-tow", 10);
  82.                 panel.add(bTextField);
  83.                 panel.add(new JLabel("C: "));
  84.                 cTextField = new JTextField("C-three", 10);
  85.                 panel.add(cTextField);
  86.                
  87.                 JButton insertButton = new JButton("添加");
  88.                 JButton deleteButton = new JButton("删除");
  89.                 JButton updateButton = new JButton("修改");
  90.                 panel.add(insertButton);
  91.                 panel.add(deleteButton);
  92.                 panel.add(updateButton);
  93.                
  94.                 //设置表格的选择模式---为单选模式
  95.                 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  96.                
  97.                
  98.                 /**
  99.                  * 点击JScrollPane滚动面板,取消选中的行
  100.                  */
  101.                 scrollPane.addMouseListener(new MouseAdapter() {
  102.                         @Override
  103.                         public void mouseClicked(MouseEvent e) {
  104.                                 //取消掉选中行,但是选中行的索引值还是在的,没有取消掉
  105.                                 table.clearSelection();
  106.                                 //显示选中行的索引值。
  107.                                 System.out.println("-----------------"+selectedRow);
  108.                                
  109.                                
  110.                                 //设置JTextField的默认值
  111.                                 aTextField.setText("A-one");
  112.                                 bTextField.setText("B-two");
  113.                                 cTextField.setText("C-three");
  114.                         }
  115.                 });
  116.                
  117.                
  118.                 /**
  119.                  * 将选中的JTable行的的信息传递给--aTestField、bTextField、cTextField
  120.                  */
  121.                 table.addMouseListener(new MouseAdapter() {
  122.  
  123.                         @Override
  124.                         public void mouseClicked(MouseEvent e) {
  125.                                 //获取到JTable中选定行的---索引值
  126.                                 selectedRow = table.getSelectedRow();
  127.                                 //获取到指定单元格的值
  128.                                 Object oa = defaultTableModel.getValueAt(selectedRow, 0);
  129.                                 Object ob = defaultTableModel.getValueAt(selectedRow, 1);
  130.                                 Object oc = defaultTableModel.getValueAt(selectedRow, 2);
  131.                                 //将获取去到的DefaultTableModel中指定单元格的值,传递给JTextField
  132.                                 aTextField.setText(oa.toString());
  133.                                 bTextField.setText(ob.toString());
  134.                                 cTextField.setText(oc.toString());
  135.                         }
  136.                 });
  137.                
  138.                
  139.                 /**
  140.                  * 删除
  141.                  */
  142.                 insertButton.addActionListener(new ActionListener() {
  143.                         @Override
  144.                         public void actionPerformed(ActionEvent e) {
  145.                                 //设置要添加到DefaultTableModel中的---行数据内容
  146.                                 String[] rowValues = {aTextField.getText(),
  147.                                                         bTextField.getText(), cTextField.getText()};
  148.                                 //在DefaultTableModel---添加行
  149.                                 defaultTableModel.addRow(rowValues);
  150.                                
  151.                                 //设置JTextField的默认值
  152.                                 aTextField.setText("A-one");
  153.                                 bTextField.setText("B-two");
  154.                                 cTextField.setText("C-three");
  155.                         }
  156.                 });
  157.                
  158.                
  159.                 /**
  160.                  * 添加
  161.                  */
  162.                 deleteButton.addActionListener(new ActionListener() {
  163.                         @Override
  164.                         public void actionPerformed(ActionEvent e) {
  165.                                 //获取到JTable中选定行的---索引值
  166.                                 selectedRow = table.getSelectedRow();
  167.                                 //JTable中行的索引值是从0,1,2.3...开始的,
  168.                                 //只有选中行时,才能修改内容
  169.                                 if(selectedRow != -1){
  170.                                         //删除DefaultTableModel中---指定索引值得行
  171.                                         defaultTableModel.removeRow(selectedRow);
  172.                                 }
  173.                         }
  174.                 });
  175.                
  176.                
  177.                 /**
  178.                  * 修改
  179.                  */
  180.                 updateButton.addActionListener(new ActionListener() {
  181.                         @Override
  182.                         public void actionPerformed(ActionEvent e) {
  183.                                 //获取到JTable中选定行的---索引值
  184.                                 selectedRow = table.getSelectedRow();
  185.                                 //JTable中行的索引值是从0,1,2.3...开始的,
  186.                                 //只有选中行时,才能修改内容
  187.                                 if(selectedRow != -1){
  188.                                         //通过获取到JTextField的中的值,来修改指定单元格的内容
  189.                                         defaultTableModel.setValueAt(aTextField.getText(), selectedRow, 0);
  190.                                         defaultTableModel.setValueAt(bTextField.getText(), selectedRow, 1);
  191.                                         defaultTableModel.setValueAt(cTextField.getText(), selectedRow, 2);
  192.                                 }
  193.                         }
  194.                 });
  195.                
  196.         }
  197.        
  198. }

回复 "JTable的表格维护----增、删、改。"

这儿你可以回复上面这条便签

captcha