Dans un exemple ci-dessous, une fenêtre affiche une table contenant la largeur de la fenêtre elle-même. Lorsque la fenêtre est redimensionnée, la valeur de sa largeur reflète la vérité actuelle.Comment TableModel sait que la valeur a été modifiée?
Comment cela peut-il être? Comment Swing a informé une table, qu'il devrait récupérer le modèle? Ou peut-être que le modèle reçoit des informations indiquant que la valeur a été modifiée?
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);
}
});
}
}
Si vous ajoutez un simple appel d'enregistrement dans la fonction « getValueAt » (comme 'système. out.println ("value") ') vous verrez quand swing interroge votre fonction. Il appellera probablement la valeur chaque fois que quelque chose change, y compris la taille de votre composant. – mercutio