Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Recht seltsame JList

Empfohlene Antworten

Hallo Zusammen!

Ich habe eine JList mit Automarken und wenn ich irgendeinen Wert mit der Maus

direkt anwähle, wird aufgrund des valuechanged()-Ereignises der Inhalt der Auswahl (mit System.out.println(jList1.getSelectedValue()); zum testen! )

ZWEIMAL ausgegeben.

Wenn ich allerdings mit den Pfeiltasten navigiere, gibt er den Wert (z.B. BMW)

nur einmal aus?

Wer weiss Rat?

Hi,

In der zugehörigen UIKlasse zur JList (javax.swing.plaf.basic.BasicListUI) gibt es eine Klasse MouseInputHandler, die das Interface MouseInputListener implementiert. In der Methode mousePressed() wird das Flag ValueIsAdjusting der zugehörigen JList auf true gesetzt. Weiterhin wird hier geprüft, ob Strg oder Shift gedrückt ist. In der Methode mouseReleased() wird das Flag wieder auf false zurückgesetzt.

Wenn also die linke Maustaste gedrückt wird, wird ein

ListSelectionEvent mit ValueIsAdjusting = true gefeuert und beim Loslassen der linken Maustaste ein weiteres ListSelectionEvent mit ValueIsAdjusting = false.

Abhilfe:

Am Anfang des Listenerbereichs, also vor deiner stdout Ausgabe folgende Zeile.

if (evt.getValueIsAdjusting()) return;

Gruß Jaraz

Lösung übrigens aus dclj Newsgroup "geklaut".

Aber ich hatte das Problem auch schon mal.

Gleich mal auf den JBuilder stürzen.

Man sieht wieder mal wie umfangreich selbst einfache Dinge sind.

bei mir hat folgendes bei einem ähnlichem problem geholfen:

du fragst ja sicher ab:

if (evt.getSource() == list_object)

{

das, was er dann machen soll;

evt.setSource = null;

}

Habe also "evt.setSource = null;" eingefügt. dann führt er "das, was er dann machen soll;" nur einmal aus.

alternativ kann man auch eine beliebig andere variable abfragen (am besten ein "boolean FLAG") dieses FLAG setzt man dann am ende um.

Hi,

warum sollte man ein eigenes Flag implementieren, wenn es schon ein eingebautes gibt?

Siehe Lösung oben.

Gruß Jaraz

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.