java TableModel如何知道值已更改?
在下面的示例中,窗口显示一个表,其中包含窗口本身的宽度。当窗口调整大小时,它的宽度值反映了当前的真实情况
这怎么可能?Swing如何通知表它应该重新请求模型?或者模型正在接收值已更改的信息
public class JTableDynamicUpdate extends JFrame {
private AbstractTableModel tableModel = new AbstractTableModel() {
private String[] columnNames = new String[] {"Parameter", "Value"};
public String getColumnName(int column) {
return columnNames[column];
};
@Override
public int getRowCount() {
return 1;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if( rowIndex == 0 ) {
if( columnIndex == 0 ) {
return "Window width:";
}
else if( columnIndex==1) {
return getSize().width;
}
}
throw new IndexOutOfBoundsException();
}
};
private JTable table = new JTable(tableModel);
private JScrollPane tableScroll = new JScrollPane(table);
private Container contentPane = getContentPane();
{
contentPane.setLayout(new BorderLayout());
contentPane.add(tableScroll, BorderLayout.CENTER);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTableDynamicUpdate frame = new JTableDynamicUpdate();
frame.pack();
frame.setVisible(true);
}
});
}
}
# 1 楼答案
JTable只是一个视图,这意味着它不包含任何值。A将为您生成一个异常,以便您查看整个跟踪:
重新绘制框架最终将触发表的重新绘制。表模型将用于获取重新绘制特定单元格所需的值
# 2 楼答案
只需以这种方式更改
getValueAt()
方法,就可以很容易地从方法调用链中找到发生的情况: