Hallo,
ich habe folgendes Problem:
Ich möchte einen KeyHandler am liebsten für eine Zelle registieren und dann beim Drücken von Tasten auf das Ereignis regieren und auf die Zelle, in der diese Tasten gedrückt wurden, zuzugreifen.
Bisher registiere ich den Handler am XExtendedToolkit des XSpreadsheetDocuments und zwar so:
Code: Alles auswählen
XSpreadsheet document = ........
.......
XModel model = qI(document);
XController controller = model.getCurrentController();
controller.addEventListener(new TestKeyHandler());
XWindow window = controller.getFrame().getContainerWindow();
XWindowPeer windowPeer = qI(window);
XExtendedToolkit toolkit = qI(windowPeer.getToolkit());
toolkit.addKeyHandler(new TestKeyHandler());
die Methode qI erleichtert mir den Aufruf der queryInterface Methode und spart Codezeilen:
Code: Alles auswählen
public static <TTarget> TTarget qI(Object instance, TTarget... classes)
throws Exception {
Class<?> targetInterface = null;
if (classes.length == 0) {
targetInterface = classes.getClass().getComponentType();
} else if (classes.length == 1) {
targetInterface = classes[0].getClass();
} else {
throw new IllegalArgumentException(
"Only one interface is supported! Given:"
+ Arrays.toString(classes));
}
return (TTarget) UnoRuntime.queryInterface(targetInterface, instance);
}
Leider wird das Event nicht nur beim Drücken von Tasten innerhalb der Tabellen (Spreadsheets) ausgelöst. Gibt es eine Möglichkeit den KeyHandler direkt an der Zelle (XCell) oder Zellenbereich (XCellRange) zu registieren? Oder gibt es zumindestens die Möglichkeit rauszufinden in welcher Zelle der Cursor steht, wenn das KeyPressed Event von ExtendedToolkit geworfen wird?
Bin für jede Hilfe dankbar!
Gruß Konstantin