Das Event 'hängt' an der Eigenschaft des SelectionModels. Somit hast du nicht wirklich eine Option zu unterscheiden, von wem die Änderung durchgeführt wurde.
lsendrak hat bereits eine Lösung geschrieben. - Allerdings verstehe ich den 'Doppelaufruf' hierbei nicht:
du hast eine Variable:
boolean changedByUserCode = false;
In deiner Methode wäre es ja:
changedByUserCode = true; cbo.getSelectionModel().select(0);
In deinem Event kannst du gegenprüfen:
if (changedByUserCode) { eventByUserCode(); } else { eventByUI(); }
womit du keinen Doppelaufruf hättest.
Dir scheint diese Form allerdings nicht zu gefallen, daher sehe ich nur zwei Alternativen hierzu:
Du Schreibst selbst eine Ableitung eines SelectionModels, bei denen du direkt eingreifen und unterscheiden kannst, und hier beispielsweise unterschiedliche Properties anbieten, die eine Auswahl zwischen User und UI Event bieten.
Die andere Option: Du überlegst dir, ob dieses entsprechende Ereignis tatsächlich bei der Auswahl der Combobox erfolgen muss, oder ob es hier nicht einen anderen Weg gibt. - Dazu wäre es gut zu erläutern, was hier geschieht.