SWT TableCursor

lumo

Top Contributor
Hallo!

ich bin noch immer bei meiner tabelle...
ich habe einen TableViewer und darin etliche TableColumns.
einige TableColumns sind !resizeable und !enabled.
ich habe auch einen TableCursor hinzugefügt, damit ich elegant durch die zeilen/zellen navigieren kann.
klappt so weit auch ganz gut ABER... der TableCursor geht auch durch zellen der größe 0, die disabled sind!
gibt es eine möglichkeit, dass ich dem TableCursor mitteile, dass er diese zellen skippen soll??

irgendwie ist die tabelle so richtig wie ne faust ins auge!
 
T

Tomate_Salat

Gast
noch nicht mit tablecursor gearbeitet, aber der hat doch bestimmt einen eventlistener, den du benutzt um durchzunavigieren.

Da wäre mein Vorschlag:
merke dir in welche Richtung gesprungen wird, überprüfe die Zelle ob sie disabled ist oder die größe 0 hat...falls ja springe weiter in die richtung, sofern eine Zelle in die Richtung vorhanden ist
 

lumo

Top Contributor
noch nicht mit tablecursor gearbeitet, aber der hat doch bestimmt einen eventlistener, den du benutzt um durchzunavigieren.

Da wäre mein Vorschlag:
merke dir in welche Richtung gesprungen wird, überprüfe die Zelle ob sie disabled ist oder die größe 0 hat...falls ja springe weiter in die richtung, sofern eine Zelle in die Richtung vorhanden ist

genau das versuche ich, scheints aber nicht zu geben...
jetzt hacke ich im sourcecode rum und mach mich schlau...:rtfm:
 

lumo

Top Contributor
so, fertig mit dem HACKEN (sorry, was anderes ists langsam nicht mehr :lol:)

kopie vom TableCursor anlegen zb MyTableCursor.
dann muss man in der funktion void keyDown(Event event)
den folgenden case ersetzen
Code:
		case SWT.ARROW_RIGHT: {
			System.out.println("ARROW_RIGHT");
			int columnCount = table.getColumnCount();
			if (columnCount == 0)
				break;
			int[] order = table.getColumnOrder();
			int index = 0;
			while (index < order.length) {
				if (order[index] == columnIndex)
					break;
				index++;
			}
			if (index == order.length)
				index = 0;
			int leadKey = (getStyle() & SWT.RIGHT_TO_LEFT) != 0 ? SWT.ARROW_RIGHT
					: SWT.ARROW_LEFT;
			// <!-- LUMO
//			System.out.println("starting at index " + index);
			do {
//				System.out.println("skipped index# " + index);
				if (event.keyCode == leadKey) {
					index--;
//					System.out.println("<--");
				} else {
					index++;
//					System.out.println("-->");
				}
			} while (!isColumnEnabled(index));
			if (event.keyCode != leadKey) {
				index--;
			} else {
				index++;
			}

//			System.out.println("valid index# " + index);
			// LUMO -->
			if (event.keyCode == leadKey) {
				setRowColumn(rowIndex, order[Math.max(0, index - 1)], true);
			} else {
				setRowColumn(rowIndex, order[Math.min(columnCount - 1,
						index + 1)], true);
			}

			break;
		}

dann noch die funktion
Code:
	boolean isColumnEnabled(int column) {
		TableColumn col = column == -1 || table.getColumnCount() == 0 ? null
				: table.getColumn(column);
		return col.getResizable() && !(col.getWidth()>0);
	}
hinzufügen, die testet ob der column die breite 0 hat und nicht resizeable ist...
mag etwas umständlich sein... aber es funktioniert in 100% der fälle!

PS: wenn jemand eine schönere lösung hat... bitte zeigen, danke! :applaus:
EDIT: hab jetzt noch den src als txt file angehängt... also runterladen und dann ohne die .txt speichern ;)
 

Anhänge

  • MyTableCursor.java.txt
    26,5 KB · Aufrufe: 2
Zuletzt bearbeitet:

Neue Themen


Oben