2017-03-16 2 views
0

Mein Code dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)) Dosen't Arbeit:Wenn ich meine Fram von AddMouseListener schließe, sage es, dass dies inkompatibel ist, also mit was kann ich das ändern?

jTable1.addMouseListener(new MouseAdapter() { 

     @Override 
     public void mouseClicked(MouseEvent e) { 

      if (e.getClickCount() == 2) { 
       int select = jTable1.getSelectedRow(); 
       int choi = JOptionPane.showConfirmDialog(null, "Voulez Vous vraiment choisir ce client ?"); 
       if(choi == 0){ 
        Utile.idClient=jTable1.getModel().getValueAt(select, 0).toString(); 
        dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); 

       } 

      } 
     } 
    }); 
+0

Bitte zeigen Sie Ihr Fehlerprotokoll. – Gary99

+0

Was funktioniert nicht? Erhalten Sie Fehler? Verwenden Sie einen Debugger und überprüfen Sie, ob der Code aufgerufen wird. –

Antwort

1

Da Sie eine innere Klasse this Punkte auf die innere Instanz verwenden. Um die äußere Instanz zu verwenden:

MyFrame.this 
+0

Das setzt voraus, dass die Klasse JFrame erweitert, was nicht sein sollte. – camickr

+0

@HichemJAVA, Ihre Klasse sollte JFrame NICHT erweitern, da Sie die Funktionalität des Frames nicht ändern. Sie sollten ein JPanel mit all Ihren Komponenten erstellen und dann das Panel zu einem Frame hinzufügen. Suchen Sie im Internet nach "Komposition vs Vererbung", um den Unterschied zwischen den beiden Ansätzen zu verstehen. Sobald Sie beim Erstellen Ihrer Klassen "Komposition" verwenden, wird diese Lösung nicht funktionieren. – camickr

0
dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); 

"this" bezieht sich auf die Mouselistener, nicht den Rahmen.

das aktive Fenster finden Sie so etwas wie tun:

Window window = SwingUtilities.windowForCompoent(e.getComponent()); 
dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING)); 
Verwandte Themen