JTable表格實現動態更新的兩種方式

JTable表格的構造方法

JTable()
構造一個默認 JTable是使用默認的數據模型,默認的列模型和默認的選擇模型對其進行初始化。
JTable(int numRows, int numColumns)
構造一個 JTable與 numRows和 numColumns使用空單元格 DefaultTableModel 。
JTable(Object[][] rowData, Object[] columnNames)
構造一個 JTable以顯示二維數組中的值 rowData ,列名稱爲 columnNames 。
JTable(TableModel dm)
構造一個 JTable ,它以 dm爲數據模型,默認列模型和默認選擇模型。
JTable(TableModel dm, TableColumnModel cm)
構造一個 JTable ,它以 dm作爲數據模型 cm , cm作爲列模型,以及默認選擇模型。
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
構造一個 JTable ,它以 dm作爲數據模型 cm , cm作爲列模型, sm作爲選擇模型。
JTable(Vector rowData, Vector columnNames)

方法一
通過表格方法updateUI配合Vector使用


import java.awt.Container;
import java.awt.Font;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Demo extends JFrame {
    private static final long serialVersionUID = 1L;
    public Container panel = null;
    private JScrollPane jsp;
    private JTable studentTable;;
    private JButton cancleButton;
    private Vector<Vector<String>> vs;
    String[][] str1 = { { "1", "2", "3" }, { "11", "22", "33" } };
    String[][] str3 = { { "4", "5", "6" }, { "44", "55", "66" } };

    String[] str2 = { "第一行", "第二行", "第三行" };

    public Demo() {
        panel = this.getContentPane();
        panel.setLayout(null);
        List<String> list = Arrays.asList("第一行", "第二行", "第三行");
        Vector<String> v = new Vector<String>(list);

        vs = new Vector<Vector<String>>();

        List<String> list1 = Arrays.asList("1", "2", "3");
        Vector<String> v1 = new Vector<String>(list1);

        List<String> list2 = Arrays.asList("11", "22", "33");
        Vector<String> v2 = new Vector<String>(list2);

        List<String> list3 = Arrays.asList("111", "222", "333");
        Vector<String> v3 = new Vector<String>(list3);

        vs.add(v1);
        vs.add(v2);
        vs.add(v3);

        studentTable = new JTable(vs, v);
        studentTable.setFont(new Font("宋體", Font.BOLD, 40));
        studentTable.setRowHeight(40);

        jsp = new JScrollPane(studentTable);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        panel.add(jsp);
        jsp.setBounds(160, 100, 500, 400);

        cancleButton = new JButton("刪除");
        cancleButton.addActionListener(e -> remove());

        panel.add(cancleButton);

        cancleButton.setBounds(360, 510, 100, 50);
        studentTable.updateUI();

        this.setLocation(450, 200);
        this.setSize(800, 650);
        this.setVisible(true);

    }

    private void remove() {
        int i = studentTable.getSelectedRows().length - 1;
        while (i >= 0) {
            // System.out.println(studentTable.getSelectedRows()[i--]);
            vs.remove(studentTable.getSelectedRows()[i--]);
            studentTable.updateUI();
        }
    }

    public static void main(String[] args) {
        new Demo();
    }
}

方法二
使用TableModel構造Jtable 在TableModel內調用fireTableDataChanged()方法,使表格進行動態刷新

通過每次調用refrese()方法,刷新表格內數據


public class MyTableModel extends AbstractTableModel {

    private final String[] columnNames = {"編號","教師信息","教授科目","電話號碼","信息標題"};
    private Object[][] rowData = null; 

    public MyTableModel(Object[][] rowData) {
        this.rowData = rowData;
    }
    @Override
    public int getRowCount() {
        return rowData.length;
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnNames[columnIndex];
    }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return rowData[rowIndex][columnIndex];
    }
    public void refresh(Object[][] rowData){
        this.rowData = rowData;
        this.fireTableDataChanged();
    }
}
發佈了39 篇原創文章 · 獲贊 35 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章