SWT DoubleClick auf Table-Eintrag abfangen?

RipdEaTh

Mitglied
Hi Leute!

Wie man der Überschrift schon entnehmen kann, möchte ich gerne einen Doppelklick auf einen Eintrag in einem Table-Objekt abfangen und bearbeiten.
Allerdings komme ich der Sache nicht wirklich näher.

Ich kann einen MouseListener auf den Table legen, aber dann kann ich alles im Table doppelt anklicken und der Listener springt an. Dieser soll allerdings nur etwas machen, wenn ein Eintrag im Table doppelt angeklickt wird (es soll dann als Bestätigung der Auswahl gelten und übernommen werden).

Vielleicht könnt ihr mir einige Denkanstösse geben? :)
Würd mich freuen!

Vielen Dank im Voraus.
LG Flo


/EDIT: Habs nun doch schon gelöst bekommen. Habe einen SelectionListener auf den Table gelegt. Die Methode widgetDefaultSelected wird bei einem Doppelklick auf einen Eintrag im Table ausgelöst. Genau das was ich wollte :)
 
Zuletzt bearbeitet:
Hallo,

verwende einen MouseListener und frage über die Methode getClickCount() die Anzahl ab.

Beispiel:

jButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
System.out.println("mouseClicked()"); // TODO Auto-generated Event stub mouseClicked()
System.out.println( e.getClickCount());
}}

Ergebnis bei Doppelklick : 2

Gruß

Harald
 
Hehe, danke aber das war nicht mein Problem.
Ich wollte nicht, dass man im gesamten Table Doppelklicken kann, sondern nur auf die Einträge im Table. Habs mit dem SelectionListener gelöst :)

Java:
table.addSelectionListener(new SelectionListener() {
	public void widgetDefaultSelected(SelectionEvent arg0) {
		Table source = (Table)arg0.getSource();
		TableItem[] item = source.getSelection();
		selConn(item[0].getText());
	}
	public void widgetSelected(SelectionEvent arg0) { }
});
 
Hallo,

addMouseListener kannst du auch auf eine Tabelle anwenden.
Ich hätte in dem Beispiel auch eine Tabelle angeben sollen.

Sieht so aus:

table.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e)

System.out.println( e.getClickCount());
 
Ja ich weiß, aber ich hab so das Gefühl, du verstehst meine eigentliche Problemstellung nicht.
Der Listener soll nur anspringen wenn doppelt auf einen Eintrag geklickt wird, nicht auf irgendeine Stelle in dem Table.
Legt man den MouseListener auf den Table, so springt dieser bei einem Doppelklick irgendwo im Table (auch wenn dieser Punkt leer ist) an. Und genau das wollte ich ja nicht ^^ Er sollte nur aktiviert werden, wenn auf einen Tabelleneintrag gedoppelklickt wird :)
Und da bringt mir der MouseListener nichts, weil er eben wie besagt, bei jedem Doppelklick im Table anspringt.

Der SelectionListener mit der Methode widgetDefaultSelected springt nur an, wenn ein Eintrag im Table doppelt angeklickt wird, nicht aber, wenn man in eine leere Stelle im Table doppelklickt.

Hoffe, das ganze ist nun etwas klarer geworden ^^
 
Hallo zusammen,

ich weiß... der Eintrag ist ziemlich alt. Aber irgendwie such ich mir einen Wolf und komm nicht auf die richtige Lösung. Vielleicht steh ich auch nur auf dem Schlauch...

Ich möchte gerne das selektieren eines Eintrags anders verarbeiten, als den Doppelklick auf einen Eintrag.

Für den Doppelklick funktioniert das Codebeispiel von RipdEaTh einwandfrei. Füge ich aber noch Code für den Einfachklick in die Funktion widgetSelected ein, wird dieser immer ausgeführt. Also beim Einfachklick und auch beim Doppelklick.

Wie kann ich die beiden Events unterscheiden? Tipps wie "zählen von Mausklicks" haben mich leider auch nicht zum Ziel gebracht.

DANKE und ein schönes WE (hoffentlich auch bald für mich ;))
 
Ja ich denke du denkst falsch. Ein Doppelklick ist doch immer auch ein einfacher Klick insofern funktioniert das völlig richtig.

Grüße

Flar
 
hallo...

dann lass mich mal die Frage anders formulieren.

Wie programmiert man die Listener so, dass wenn man schon eine Routine für einen einfachen Mousecklick hat, eine weitere Routine hinzufügen kann für einen Doppelklick. Dabei soll bei einem Doppelcklick NUR die Routine für den Doppelklick ausgelöst werden, ohne die für den einfachen Mouseclick.

Grüße, Taggi
 
Sorry aber ich denke das geht wie gesagt rein logisch nicht. Wie soll dein Programm bei dem ersten Klick wissen, dass irgendwann ein paar Milisekunden später nocheinmal ein Klick kommt.

Andersformuliert: Jemand machen den ersten Klick eines Doppelklicks. Da ein Doppelklick ja immer aus zwei einfach Klicks besteht müsste dein Programm beim zweiten Klick irgendwie die Vergangenheit ändern.

Am besten schreibst du mal was der Einfachklick machen soll und was der Doppelklick. Normalerweise markiert der Einfachklick eine Zeile und der Doppelklick öffnet eine Tabellenzeile. Das sollte sich normalerweise nicht im Weg stehen.

Wenn ich das in anderen Programmen so mache dann funktioniert das auch genauso.

Grüße

Flar
 
Wie wärs hiermit:

TableItem item = table.getItem(new Point(mouseEvent.x, mouseEvent.y));
 
Zurück