java从入门到精髓 - Swing表格JTable利用tableModel添加行修改行删除行

时间:2022-12-08 15:37:35
import  java.awt.BorderLayout;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;
import  java.awt.event.MouseAdapter;
import  java.awt.event.MouseEvent;
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;
// 维护表格
public   class  JTableDefaultTableModelTest  extends  JFrame{

    
private  DefaultTableModel tableModel;    // 表格模型对象
     private  JTable table;
    
private  JTextField aTextField;
    
private  JTextField bTextField;
    
    
public  JTableDefaultTableModelTest()
    {
        
super ();
        setTitle(
" 表格 " );
        setBounds(
100 , 100 , 500 , 400 );
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        String[] columnNames 
=  { " A " , " B " };    // 列名
        String [][]tableVales = {{ " A1 " , " B1 " },{ " A2 " , " B2 " },{ " A3 " , " B3 " },{ " A4 " , " B4 " },{ " A5 " , " B5 " }};  // 数据
        tableModel  =   new  DefaultTableModel(tableVales,columnNames);
        table 
=   new  JTable(tableModel);
        JScrollPane scrollPane 
=   new  JScrollPane(table);    // 支持滚动
        getContentPane().add(scrollPane,BorderLayout.CENTER);
        
// jdk1.6
        
// 排序:
        
// table.setRowSorter(new TableRowSorter(tableModel));
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);   // 单选
        table.addMouseListener( new  MouseAdapter(){     // 鼠标事件
             public   void  mouseClicked(MouseEvent e){
                
int  selectedRow  =  table.getSelectedRow();  // 获得选中行索引
                Object oa  =  tableModel.getValueAt(selectedRow,  0 );
                Object ob 
=  tableModel.getValueAt(selectedRow,  1 );
                aTextField.setText(oa.toString());  
// 给文本框赋值
                bTextField.setText(ob.toString());
            }
        });
        scrollPane.setViewportView(table);
        
final  JPanel panel  =   new  JPanel();
        getContentPane().add(panel,BorderLayout.SOUTH);
        panel.add(
new  JLabel( " A:  " ));
        aTextField 
=   new  JTextField( " A4 " , 10 );
        panel.add(aTextField);
        panel.add(
new  JLabel( " B:  " ));
        bTextField 
=   new  JTextField( " B4 " , 10 );
        panel.add(bTextField);
        
final  JButton addButton  =   new  JButton( " 添加 " );    // 添加按钮
        addButton.addActionListener( new  ActionListener(){ // 添加事件
             public   void  actionPerformed(ActionEvent e){
                String []rowValues 
=  {aTextField.getText(),bTextField.getText()};
                tableModel.addRow(rowValues);  
// 添加一行
                 int  rowCount  =  table.getRowCount()  + 1 ;    // 行数加上1
                aTextField.setText( " A " + rowCount);
                bTextField.setText(
" B " + rowCount);
            }
        });
        panel.add(addButton);  
        
        
final  JButton updateButton  =   new  JButton( " 修改 " );    // 修改按钮
        updateButton.addActionListener( new  ActionListener(){ // 添加事件
             public   void  actionPerformed(ActionEvent e){
                
int  selectedRow  =  table.getSelectedRow(); // 获得选中行的索引
                 if (selectedRow !=   - 1 )    // 是否存在选中行
                {
                    
// 修改指定的值:
                    tableModel.setValueAt(aTextField.getText(), selectedRow,  0 );
                    tableModel.setValueAt(bTextField.getText(), selectedRow, 
1 );
                    
// table.setValueAt(arg0, arg1, arg2)
                }
            }
        });
        panel.add(updateButton);
        
        
final  JButton delButton  =   new  JButton( " 删除 " );
        delButton.addActionListener(
new  ActionListener(){ // 添加事件
             public   void  actionPerformed(ActionEvent e){
                
int  selectedRow  =  table.getSelectedRow(); // 获得选中行的索引
                 if (selectedRow !=- 1 )   // 存在选中行
                {
                    tableModel.removeRow(selectedRow);  
// 删除行
                }
            }
        });
        panel.add(delButton);
    }
    
/**
     * 
@param  args
     
*/
    
public   static   void  main(String[] args) {
        
//  TODO Auto-generated method stub
        JTableDefaultTableModelTest jTableDefaultTableModelTest  =   new  JTableDefaultTableModelTest();
        jTableDefaultTableModelTest.setVisible(
true );
    }

}