swing JTable学习(六)—tableModel firechange

package table;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

public class SimpleTableTest extends JFrame {

    private static final long serialVersionUID = -4172876583187222326L;
    protected JTable table;

    public SimpleTableTest() {
        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());

        Button add = new Button("add");
        
        TableValues tv = new TableValues();
        table = new JTable(tv);

        //ArrayList aa = (ArrayList) table.getModel();
        
        // 设置行高
        table.setRowHeight(30);
        // 必须把table放入JScrollPane才会有列名出现
        JScrollPane jsp = new JScrollPane(table);
        pane.add(jsp, BorderLayout.CENTER);
        pane.add(add,BorderLayout.SOUTH);
        init(add,tv,table);
    }

    

    private void init(Button add,final TableValues tv,final JTable table) {
        add.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
               tv.setValueAt("aaa", 0, 0);
               Vector v1 = new Vector();
               v1.addElement("lvyuan");
               v1.addElement(true);
               
               
               tv.addRow(v1);
                
            }
           
            
        });
        
    }


    public static void main(String[] args) {
        SimpleTableTest stt = new SimpleTableTest();
        stt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        stt.setSize(400, 200);
        stt.setVisible(true);
    }
}




package table;

import java.util.Vector;

import javax.swing.table.AbstractTableModel;

/**
 * 注意:一般使用AbstractTableModel创建TableModel的实现,只有少量数据时使用DefaultTableModel,
 */
public class TableValues extends AbstractTableModel {
    private static final long serialVersionUID = -8430352919270533604L;
    public final static int NAME = 0;
    public final static int GENDER = 1;
    public final static String[] columnNames = { "姓名", "性别" };
    public Object[][] values = { { "Cannel_2020", true }, { "Lucy", false }, { "韩梅", false }, { "李雷", true }, { "Jim", true } };

    
    public int getColumnCount() {
        return values[0].length;
    }

    public int getRowCount() {
        return values.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return values[rowIndex][columnIndex];
    }

    /**
     * 获取列名
     */
    public String getColumnName(int column) {
        return columnNames[column];
    }
    
    
    public void setValueAt(Object value, int row, int col) {
        values[row][col] = value;
        fireTableCellUpdated(row, col);<span style="font-size:18px;color:#FF0000;">//此处更改值后,要用这个方法通知表格,模型中的值已刷新,从而刷新界面。</span>
    }
    

    public Vector<String> addRow(Vector<String> rowData) {
        // TODO Auto-generated method stub
        
        Vector v = convertToVector(values);
        
        v.addElement(rowData);
        
        fireTableRowsUpdated(5,5);
        
        System.out.println(v);
        return v;
        
    }
    
    public boolean isCellEditable(int rowIndex, int columnIndex){
        return true;
    }
    
    
    protected  Vector convertToVector(Object[][] anArray) {
        if (anArray == null) {
            return null;
    }
        Vector v = new Vector(anArray.length);
        for (int i=0; i < anArray.length; i++) {
            v.addElement(convertToVector(anArray[i]));
        }
        return v;
    }
    
    protected static Vector convertToVector(Object[] anArray) {
        if (anArray == null) { 
            return null;
    }
        Vector v = new Vector(anArray.length);
        for (int i=0; i < anArray.length; i++) {
            v.addElement(anArray[i]);
        }
        return v;
    }
    
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值