Doppelklick auf JTable

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Doppelklick auf JTable

    Hi, ich habe eine JTabele die ich mit einem DefaultTableModel befeuere und mittels ".isCellEditable()" schreibgeschützt gesetzt habe. (siehe anderer Thread von mir)
    Nun möchte ich gerne mit einem Doppelklick auf einen Eintrag ein neues Fenster öffnen...
    Das Problem ist das weder die JTable noch das JModel einen ActionListener haben wollen und der ListSelectionListener hilft mir recht wenig, da er nur auf Änderungen des Inhalts reagiert und leider auch nicht abstrakt ist, sich somit also leider nicht anpassen lässt.

    Meine Lösung wäre ein Umweg über die Methode "isCellEditable()", da diese bei jedem Auswählen eines Eintrags aufgerufen wird. Allerdings reagiert das dann schon auf einen einzelnen Klick, nicht auf einen Doppelklick. Das ließe sich dann realisieren über eine Variable "letztKlick" und einen Timer, sodas ich abfrage ob 2mal auf den selben Eintrag geklickt wurde und ob das schnell genug war für einen Doppelklick.
    Mir erscheint diese Lösung allerdings so als würde jemand mit der Kettensäge Rasen mähen.

    Also, wie läuft das?

    TIA
    Look

    Edit:
    Es soll ja nicht zu einfach werden, ich hätt da noch ne Frage: Ich würde gern per Rechtsklick auf einen Eintrag ein KontextMenü öffnen. Bloß wie?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Lookbehind ()

  • Ich würde es mit einem MouseListener machen.
    Das MouseEvent hat so etwas wie getClickCount(). Das sollte für deinen Fall 2 sein. Wenn das passert, dann machst du die aktuelle Zelle editierbar und setzt den Cursor rein. Durch den Mausklick kann man ja vorraussetzen, dass die aktuelle Zelle die Zelle ist, die unter der Maus liegt.

    Edit:
    Für einen Rechtsklick im Prinzip das Selbe. Die rechte Maustaste ist BUTTON3 (die linke BUTTON1). Die Koordinaten bekommst du auch. Dadurch weißt du wo du das Menu platzieren musst. Das Menu ist im Zweifel ein eigener JFrame. Ich bin mir aber sicher, dass es da irgendwo was vorgefertigtes gibt. Da musst du mal schauen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Hafner ()

  • Moin,

    den MouseListener würde ich auch empfehlen, für beide Aktionen.
    Problematisch wird wohl nur, das ganze so abzufangen, dass der Doppelklick als solcher interpretiert wird.
    Habe das grad mal versucht, aber das wollte nicht so wie ich.

    Für den Rechtsklick kannst Du das JPopupMenu nutzen, welches dasselbe verkörpert wie jenes auf dem Windows-Desktop.
    Hier der Link zur API:
    java.sun.com/javase/6/docs/api/javax/swing/JPopupMenu.html

    Gruß,
    Puni

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Puni ()

  • Alle Woche wieder 8)
    Also erstmal vielen dank euch beiden, eine Kombination aus beiden Lösungen hat wunderbar funktioniert, und auch der Tipp mit dem PopupMenu war gut :thumbup:
    Danke!

    Damit sind wir aber gleich bei meinem nächsten Problem, ich bekomme dieses PopupMenu nicht wieder zu :whistling:
    Also, stimmt nicht ganz, wie ich es zu krige weiß ich, aber wie löse ich das aus außer durch drauf klicken?
    Ich mein, klar, ich mach das Kontext-Menü auf, klicke auf einen Eintrag und es geht wieder zu. So weit so gut.
    Wenn ich jetzt aber das Kontext-Menü ausversehen öffne und es wieder schließen will, geht das nur indem ich auch einen Eintrag daraus aufrufe, nicht aber wenn ich daneben klicke.
    Ich hatte gehoft das Problem einfach mit einem FocusListener erschlagen zu können. Prinziep: Ich klicke sonnst wo hin => Kontext-Menü verliert Focus => FocusListener merkt das => Kontext-Menü geht zu. Das einzig Blöde an der Sache ist, das das Kontext-Menü niemals den Focus bekommt, selbst dann nicht, wenn ich drauf klicke.
    Und der MousListener arbeitet nur solange für mich, wie ich mich in meinem Fenster bewege, wenn ich irgendwo auf den Desktop klicke, interessiert das den MouseListener auch nicht.

    Jemand ne Idee?
  • Moin,

    also Dein Problem kann ich irgendwie nicht nachvollziehen, aber vielleicht hast Du auch einen etwas anderen Code wie ich.
    Dies ist mein MouseEvent für den Aufruf des PopupMenüs:

    Quellcode

    1. void jTable_daten_mouseClicked(MouseEvent e) {
    2. if (e.getButton() == MouseEvent.BUTTON3) {
    3. jPopupMenu.show(e.getComponent(), e.getX(), e.getY());
    4. }
    5. }

    Und wenn ich dort außerhalb des Menüs links in mein Programm klicke, verschwindet es ohne Probleme.

    Gruß,
    Puni