Hallöle,
Bei Swing gibt es die Klasse ActionMap. ActionMaps bilden Objekte (in der Regel Strings) auf Actions ab.
Die Action fürs Kopieren sollte sich so austauschen lassen:
;
jtable.getActionMap().put("copy", new AbstractAction() {...});
Vielen lieben Dank, das hat mich zu folgender Lösung gebracht:
Mein Code zum Abfangen des Events:
~~~java
jTable.getActionMap().put("copy", new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
copyActiveCell(jTable);
}
}
);
und der Code für's eigentliche Event-Handling (da ich das für mehrere Tables benutzen will, als Extra-Methode, nicht direkt im Listener (ja, ich weiß, das könnte man auch mit einer Ableitung von JTable lösen):
private void copyActiveCell(JTable table)
{
int col = table.getSelectedColumn();
int row = table.getSelectionModel().getLeadSelectionIndex();
if (row == -1)
{
row = table.getSelectedRow();
}
if ((row >= 0) && (col >= 0))
{
Object cellValue = table.getValueAt(row, col);
if (cellValue != null)
{
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(cellValue.toString()), null);
}
}
}
Das scheint soweit zu funktionieren.
Eine Frage bleibt aber noch:
Gibt es eine Liste der definierten Strings, die ich bei dem put in die ActionMap verwenden kann?
Also eine Liste der verfügbaren Events?
Klar, wenn ich eigene Events definiere, kann ich auch deren Namen frei vergeben, so daß es keine allgemeine Liste geben kann.
Aber einige Events sind ja wohl vordefiniert, siehe "copy".
In der API-Doc zu ActionMap hab ich nichts gefunden.
cu,
Robert