Mattia541993 ha scritto:
Esattamente. Tu come lo faresti?
Innanzitutto c'è da precisare una cosa: la logica che hai detto e che ho capito, la puoi fare solo se tieni tu
esternamente un "flag" che imposti a true poco prima di invocare setSelectedIndex e poi appena dopo lo rimetti a false. E lo dovresti fare appunto ogni volta che "sai" di dover invocare esplicitamente setSelectedIndex.
Se lo fai per un solo combobox, potrebbe anche essere accettabile. Se hai bisogno di farlo per svariate combobox ... allora no, bisognerebbe "incapsulare" meglio questa logica, ovvero estendendo JComboBox.
Il punto è che estendendo JComboBox, NON puoi ridefinire banalmente il setSelectedIndex per mettere questa logica al suo interno. Perché il setSelectedIndex viene comunque invocato in automatico a seguito degli eventi causati dall'utente, quindi non potresti fare la distinzione che pensavi. La soluzione è tutto sommato semplice: se si estende JComboBox si può definire un NUOVO metodo es. setExplicitSelectedIndex in cui metti quella logica.
Ovvero, esempio:
class MyComboBox<E> extends JComboBox<E> {
private boolean explicitSetSelectedIndex;
// .... eventuali costruttori .....
public void setExplicitSelectedIndex(int anIndex) {
explicitSetSelectedIndex = true;
setSelectedIndex(anIndex);
explicitSetSelectedIndex = false;
}
public boolean isExplicitSetSelectedIndex() {
return explicitSetSelectedIndex;
}
}
Quindi il setSelectedIndex viene comunque invocato a seguito degli eventi causati dall'utente. Ma tu "programmaticamente" andrai ad usare il nuovo setExplicitSelectedIndex. E questo ti permette di distinguere se il cambio dell'indice lo fai tu programmaticamente oppure lo richiede l'utente agendo sul combobox.