Java:JTable如何重新指定行数据
已经指定行数据和列首名来新建了一个JTable组件,后来响应事件需要重新指定一个两维数组来作为它的行数据,列首名可以不变,用哪个方法?在API中没找到,需要定义表格模型吗...
已经指定行数据和列首名来新建了一个JTable组件,后来响应事件需要重新指定一个两维数组来作为它的行数据,列首名可以不变,用哪个方法?在API中没找到,需要定义表格模型吗?还是?
DefaultTableModel有这样功能的方法吗?没找到。。。 展开
DefaultTableModel有这样功能的方法吗?没找到。。。 展开
2个回答
展开全部
替楼上的补充:一般符合MVC pattern构建的Table都是其TableModel的一个listener,所以model里内容改变后只要通知作为view的table。
目前版本的javax.swing.table.TableModel接口只有获取其listener的接口,没有规范具体通知的接口,但在AbstractTableModel类里就实现了如下通知接口:
public void fireTableChanged(TableModelEvent e);
public void fireTableStructureChanged();
public void fireTableRowsUpdated(int firstRow, int lastRow);
public void fireTableRowsInserted(int firstRow, int lastRow);
public void fireTableRowsDeleted(int firstRow, int lastRow);
public void fireTableCellUpdated(int row, int column);
public void fireTableDataChanged();
在作为TableModel的listner,JTable是实现了TableModelListener中定义的接受和处理来自model通知的接口的,就是
public void tableChanged(TableModelEvent e); 事实上AbstractTableModel上述的几个通知方法内部实现中都回调用其listener的这个方法。
根据你的情况,在重新设定二维表后,该tablemodel可以fire相应的消息,比如若连column数目都变掉的话,则调用最彻底的fireTableStructureChanged,但相应计算开销会大。 如果没有model view分得那么清,那么直接相当于从cotroller调用view的tablechange(...)方法也是可以的。
需要注意的是JTable的tablechange()的实现虽然一般情况下是够用了,但有时候需要重载自己写。比如若table的column不是根据tablemodel自动生成的,而是自己修改过了columnmodel,即JTable的autoCreateColumnsFromModel为false,那么当model的column增加的时候,JTable的实现不会自动显示增加的那个列,需要重载自己写。
目前版本的javax.swing.table.TableModel接口只有获取其listener的接口,没有规范具体通知的接口,但在AbstractTableModel类里就实现了如下通知接口:
public void fireTableChanged(TableModelEvent e);
public void fireTableStructureChanged();
public void fireTableRowsUpdated(int firstRow, int lastRow);
public void fireTableRowsInserted(int firstRow, int lastRow);
public void fireTableRowsDeleted(int firstRow, int lastRow);
public void fireTableCellUpdated(int row, int column);
public void fireTableDataChanged();
在作为TableModel的listner,JTable是实现了TableModelListener中定义的接受和处理来自model通知的接口的,就是
public void tableChanged(TableModelEvent e); 事实上AbstractTableModel上述的几个通知方法内部实现中都回调用其listener的这个方法。
根据你的情况,在重新设定二维表后,该tablemodel可以fire相应的消息,比如若连column数目都变掉的话,则调用最彻底的fireTableStructureChanged,但相应计算开销会大。 如果没有model view分得那么清,那么直接相当于从cotroller调用view的tablechange(...)方法也是可以的。
需要注意的是JTable的tablechange()的实现虽然一般情况下是够用了,但有时候需要重载自己写。比如若table的column不是根据tablemodel自动生成的,而是自己修改过了columnmodel,即JTable的autoCreateColumnsFromModel为false,那么当model的column增加的时候,JTable的实现不会自动显示增加的那个列,需要重载自己写。
TableDI
2024-07-18 广告
2024-07-18 广告
VLOOKUP函数在Excel中用于匹配两个表格的数据。具体步骤如下:1. 确定查找值:在目标表格中选择要查找的单元格或数据。2. 确定查找范围:转到另一个表格(例如,工作表A),并指定包含查找值的范围。注意该范围的首列应包含要查找的值。3...
点击进入详情页
本回答由TableDI提供
展开全部
DefaultTableModel是TableModel的子类,你先创建一个DefaultTableModel实例,它是存储Jtable数据的信息的,可以通过它对table的数据进行操作,好像这是一个设计模式中适配器模式,然后通过JTable(TableModel dm)或其他相关的构造函数创建JTable,然后通过DefaultTableModel就可以对数据进行操作了,操作之后刷新JTable组件就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询