Supportnet / Forum / Anwendungen(Java,C++...)
[Java] JComboBox: Daten auswählen ohne Event
Frage
Hallo Leute,
die Auswahl der Daten einer JComboBox kann entweder per Maus oder per Methodenaufruf (setSelectedItem) erfolgen. Der Vorgang mit Maus ist klar und O.K.
Nun zum Problem: Ich möchte per Methodenaufruf ein bestimmtes Object der ComboBox auswählen, jedoch OHNE das dabei ein ActionPerformed-Event ausgelös wird...
Hintergrund: Wenn die Auswahl per Maus erfolgt, soll diese Auswahl in eine Datenbank geschrieben werden. Dieser Vorgang ist im Event-Handler hinterlegt. Bei der ersten Darstellung der ComboBox muss ja aber der aktuelle Wert dargestellt werden. Wenn ich nun das richtige Item mit setSelectedItem setze wird das Event ausgelöst und letztlich ein Schreibvorgang in die DB ausgelöst. Das ist logischerweise ziemlich unsinnig...
Wie kann ich nun das Problem lösen?
Ich dachte schon das vorübergehende entfernen des ActionListeners, halte das aber letztlich für einen "dummen" Weg. Alternative?
tausend Dank für eine brauchbare Antwort! :)
Antwort 1 von Rangoo
Hi!
Der Action-Event wird automatisch von der Methode ausgelöst, das ist einfach so, daran wirst du nichts ändern können. Außer natürlich, du schreibst dir deine eigene JComboBox, bei der du die Methode entsprechend überschreibst. Ich denke, da dürfte der Aufwand allerdings unnötig sein...
Deine Idee mit dem Listener ist in meinen Augen die am besten handhabbare. Alternativ kannst du die JComboBox natürlich auch erst direkt vor der ersten Anzeige überhaupt erzeugen, dann kannst du in Ruhe die Liste einfüllen, das Item setzen und erst anschließend den Listener anmelden.
Der Action-Event wird automatisch von der Methode ausgelöst, das ist einfach so, daran wirst du nichts ändern können. Außer natürlich, du schreibst dir deine eigene JComboBox, bei der du die Methode entsprechend überschreibst. Ich denke, da dürfte der Aufwand allerdings unnötig sein...
Deine Idee mit dem Listener ist in meinen Augen die am besten handhabbare. Alternativ kannst du die JComboBox natürlich auch erst direkt vor der ersten Anzeige überhaupt erzeugen, dann kannst du in Ruhe die Liste einfüllen, das Item setzen und erst anschließend den Listener anmelden.
Antwort 2 von disco
moin
naja. oder du machst die einfach eine boolsche klassenvariable. bspw:
boolean callFromMethod = false;
wenn du dann den button über die methode änderst, setzte den wert auf true.
und im eventhandler fragste dann nach.
if(callFromMethod)
{
//setz nur den button
}
else
{
//schreib auch in die datenbank
}
calFromMethod=false;
g,
disco
Zitat:
eine Idee mit dem Listener ist in meinen Augen die am besten handhabbare.
eine Idee mit dem Listener ist in meinen Augen die am besten handhabbare.
naja. oder du machst die einfach eine boolsche klassenvariable. bspw:
boolean callFromMethod = false;
wenn du dann den button über die methode änderst, setzte den wert auf true.
und im eventhandler fragste dann nach.
if(callFromMethod)
{
//setz nur den button
}
else
{
//schreib auch in die datenbank
}
calFromMethod=false;
g,
disco

