我想知道,当最初用于填充表的Object [] []更改时,是否可以刷新表的GUI.
Object[][] calculationsTableData;
public Interface() {
...
analysisPanel.add(calculationsTable());
...
}
JScrollPane calculationsTable() {
populateCalculationsTableData();
...
calculationsTable = new JTable(calculationsTableData, calculationsColumnNames);
...
}
void populateCalculationsTableData(){
Object[][] temp = new Object[x.numsSize][7];
for (int i = 0; i < x.numsSize; i++) {
temp[i][0] = df.format(x.nums[i]);
...
}
calculationsTableData = temp;
}
当x对象已更改以重新填充CalculationsTableData时,将调用populateCalculationsTableData()
repaint()和revalidate()方法在这种情况下似乎无效,fireTableDataChanged()也不有效,因为这不是表模型.
解决方法:
默认情况下,如果未明确设置表模型,则JTable将创建DefaultTableModel AbstractTableModel [1]实现的新实例.如果需要更新表,则必须使用其模型.
你可以…
设置新的DefaultTableModel:
void populateCalculationsTableData() {
...
calculationsTableData = temp;
TableModel model = new DefaultTableModel(calculationsTableData, calculationsColumnNames);
calculationsTable.setModel(model);
}
或者你可以…
使用DefaultTableModel创建表:
TableModel model = new DefaultTableModel(calculationsTableData, calculationsColumnNames);
calculationsTable = new JTable(model);
将表模型强制转换为DefaultTableModel并设置其数据和列,如下所示:
void populateCalculationsTableData() {
...
calculationsTableData = temp;
DefaultTableModel model = (DefaultTableModel)calculationsTable.getModel();
model.setDataVector(calculationsTableData, calculationsColumnNames);
}
建议阅读
> JTable(Object[][] rowData, Object[] columnNames)
> DefaultTableModel#setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
> How to Use Tables
[1]:在检查了JTable(Object [] [] rowData,Object [] columnNames)源代码之后,我意识到没有创建DefaultTableModel而是从AbstractTableModel扩展了一个新的匿名内部类.
标签:java,arrays,swing,jtable 来源: https://codeday.me/bug/20191012/1903773.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。