前言
這段時間在寫一個大實驗,水果超市管理系統,yes,我覺得挺大的,但是就當成了一個實驗,接下來還有一個課程設計和一個實訓,more bigger...
問題
在我把其他的都寫好的時候去寫UI層,發現,我的表格刷新是一個大問題,那么究竟怎么靈活的設置表格中的數據呢?
這就不得不提一下TableModel
這個怪東西了
TableModel:
public interface TableModelTableModel 接口指定了 JTable 用於詢問表格式數據模型的方法。
只要數據模型實現了 TableModel 接口,就可以通過以下兩行代碼設置 JTable 顯示該模型:
TableModel myData = new MyTableModel();
JTable table = new JTable(myData);
DefaultTableModel(Object[][] data, Object[] columnNames)
構造一個 DefaultTableModel,並通過將 data 和 columnNames 傳遞到 setDataVector 方法來初始化該表。
JTable:
DefaultTableModel 是一個模型實現,它使用一個 Vector 來存儲所有單元格的值,該 Vector 由包含多個 Object 的 Vector 組成。除了將數據從應用程序復制到 DefaultTableModel 中之外,還可以用 TableModel 接口的方法來包裝數據,這樣可將數據直接傳遞到 JTable,如上例所示。這通常可以提高應用程序的效率,因為模型可以自由選擇最適合數據的內部表示形式。
以上來自JavaAPI
人話說
TableModel就是存放JTable表格數據的東西
下面是一個簡單的demo,希望對你有幫助
package test;
import javax.swing.*;
import javax.swing.table.*;
public class TableTest extends JFrame {
private JLabel title = new JLabel("水果列表"); //上部標題
private JScrollPane pane = new JScrollPane(); //表格滾動面板
private JTable table = new JTable(); //水果表格
public TableTest() {
init();//窗口初始化
addComponent();//添加表格
updateTable();//刷新表格數據
}
public static void main(String[] args) {
new TableTest();
}
//窗口初始化
public void init() {
this.setTitle("水果管理系統!");
this.setSize(600, 420);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//添加表格
public void addComponent() {
this.setLayout(null);//設置絕對布局
//添加標題
title.setBounds(265, 20, 70, 25);
this.add(title);
//表格
table.getTableHeader().setReorderingAllowed(false);//列不能移動
table.getTableHeader().setResizingAllowed(false);//不可拉動表格
table.setEnabled(false);//表格不可更改數據
pane.setBounds(50, 50, 500, 200);
pane.setViewportView(table);//滾動面板顯示表格數據
this.add(pane);
}
//刷新表格數據
public void updateTable() {
String[] title = {"水果編號","水果名稱","水果單價(/元)","計價單位"};
Object[][] rowData = {
{1,"蘋果",5.5,"kg"}
};
TableModel dataModel = new DefaultTableModel(rowData, title);
table.setModel(dataModel);
}
}