2016-12-24 1 views
-1

Ich möchte die Koordinaten (Zeilenindex und Spaltenindex) einer Zelle von JTable erhalten, wenn Schlüssel während der Bearbeitung dieser Zelle freigegeben wird. Ich versuche, es auf diese Weise zu tun:Position der Zelle bearbeitet in JTable

@Override 
public void keyReleased(KeyEvent released) { 
    JTable tbl = (JTable)(released.getSource()); 
    if (tbl.getCellEditor() != null) 
     System.out.println(tbl.getSelectedRow()+","+tbl.getSelectedColumn()); 
} 

Aber das gibt Position (Zeilenindex und Spaltenindex) der Zelle, die bearbeitet wird, nicht zurück. Bitte helfen Sie.

+0

Dies ist eine seltsame Anfrage und schlägt, zumindest für mich, vor, dass Sie ein [XY-Problem] (http://mywiki.wooledge.org/XyProblem) fragen, wo Sie fragen, wie Sie ein bestimmtes Code-Problem lösen können Die beste Lösung könnte sein, einen völlig anderen Ansatz zu verwenden. Denken Sie daran, uns das Gesamtproblem zu nennen, das Sie lösen möchten, und nicht, wie Sie es gerade lösen wollen. Berücksichtigen Sie auch das Erstellen und Veröffentlichen eines gültigen [mcve]. –

+1

Mehrere Probleme kommen in Frage, einschließlich - warum ein KeyListener in einem JTable-Zelleneditor verwenden? Es gibt normalerweise viel bessere Möglichkeiten, diese Informationen zu erhalten. Die andere - Sind Sie sicher, dass die Quelle des KeyListener die JTable und nicht das Editor-Objekt ist? –

Antwort

2

wenn der Schlüssel während der Bearbeitung dieser Zelle freigegeben wird.

Macht keinen Sinn. Der Editor hat den Fokus, wenn eine Zelle bearbeitet wird. Außerdem könnte der Benutzer die Maus verwenden, um die Zelle in den Bearbeitungsmodus zu versetzen.

Wenn Sie wissen wollen, wenn eine Zelle Bearbeitung beginnt man ein PropertyChangeListener zu der JTable hinzufügen:

// 
// Implement the PropertyChangeListener interface 
// 
    @Override 
    public void propertyChange(PropertyChangeEvent e) 
    { 
     // A cell has started/stopped editing 

     if ("tableCellEditor".equals(e.getPropertyName())) 
     { 
      if (table.isEditing()) 
       // code for editing started; 
      else 
       // code for editing stopped; 
     } 
    } 

Dann einfach Sie die getSelected...() Methoden verwenden, um die Zeile/Spalte zu erhalten.

+0

Eine vernünftige Antwort für eine nicht so anständige Frage. –

Verwandte Themen