Seite 1 von 1

Zugriff auf Zelle nach KeyPressed-Event (Java)?

Verfasst: Mi, 02.07.2008 14:20
von kde
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

Re: Zugriff auf Zelle nach KeyPressed-Event (Java)?

Verfasst: Fr, 11.07.2008 08:55
von kde
Hallo,

habs gelöst. Sobald das KeyPressed-Event von XExtendedToolkit auftritt, prüfe ich welche Cell gerade fokussiert ist. Das mache ich in dem ich die ViewData (string) parse.

Code: Alles auswählen

XSpreadsheet document = ...
XModel model = qI(document);
XController controller = model.getCurrentController();
System.out.println(controller.getViewData());
hier ist dann die Ausgabe:
100/60/0;0;tw:270;1/7/0/0/0/0/2/0/0/0/0;;

Die rote Ziffer steht für den nullbasierten Index der fokussierten Tabelle.
Die grüne Ziffer steht für den nullbasierten Index der Spalte
Die blaue Ziffer steht für den nullbasierten Index der Zeile

würden mehrere Tabellen vorhanden sein und in jeder Tabelle ein Fokus auf einer Zelle liegen, dann würde es so aussehen

Code: Alles auswählen

100/60/0;0;tw:270;1/7/0/0/0/0/2/0/0/0/0;0/0/0/0/0/0/2/0/0/0/0;4/3/0/0/0/0/2/0/0/0/0

Gruß Konstantin