在下面的例子中,一個窗口顯示一個包含窗口本身寬度的表格。當窗口被調整大小時,它的寬度值反映了當前的真相。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);
}
});
}
}
如果您在「getValueAt」功能(如'系統添加一個簡單的日誌記錄調用。 out.println(「value」)')你會看到什麼時候swing查詢你的函數。無論什麼時候發生變化,它都可能會調用該值,包括組件的大小。 – mercutio