問題出現:
設計局域網之間文件傳輸的軟件的時候,想要動態更新用戶列表JTable中數據的內容;
實現思想:
每次用戶列表數據更新的時候重新設置JTable中的數據,然后調用jtable.setUI()更新JTable控件的數據;
注意問題:
每次要先清空JTable中的數據,因為JTable中的數據就是userdata中的數據,而userdata的數據是通過add加進去的,所以之前的數據一直在;重新調用setUserTableData 的時候,是在JTable中添加數據;
添加到userdata中的row要每次重新new,row代表的行;new一個新的row代表新增加一行,沒有重新new那么row。add("數據")中的數據是加在每行的行尾,而不是新行;
錯誤方式:
public void setUserTableData() {
//設置usertable數據;
//((DefaultTableModel)usertable.getModel()).getDataVector().clear();
//清空table的數據,重新寫入;
Vector<String> row = new Vector<String>(); //錯誤
for(int i = 0;i < userList.size(); i++){
row.add(userList.get(i));
userdata.add(row);
}
Vector<String> title = new Vector<String>();
title.add("在線用戶列表");
dtmView = new DefaultTableModel(userdata, title);
this.usertable.setModel(dtmView);
jth = this.usertable.getTableHeader();
}
正確方式:
public void setUserTableData() {
//設置usertable數據;
((DefaultTableModel)usertable.getModel()).getDataVector().clear();
//清空table的數據,重新寫入;
Vector<String> row = null;
for(int i = 0;i < userList.size(); i++){
row = new Vector<String>();
row.add(userList.get(i));
userdata.add(row); // 添加數據到userdata中
}
Vector<String> title = new Vector<String>();
title.add("在線用戶列表");
dtmView = new DefaultTableModel(userdata, title); //添加userdata到JTable中
this.usertable.setModel(dtmView);
jth = this.usertable.getTableHeader();
}