Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SWT Tabelle navigieren

Empfohlene Antworten

Veröffentlicht

Hallo,

mache gerade meine ersten Gehversuche mit SWT-GUI.

Ich möchte eine editierbare Tabelle erstellen, bei der man mit den Cursor-Tasten darin navigieren.

Das Beispiel unten funktioniert ja schon ganz gut, aber ich finde die Steuerung recht umständlich (RETURN für umschalten Texteingabe-Navigation) Wie kann man das ändern, dass z.B. gleich bei Drücken eines Buchstaben der Text eingeben wird und bei Drücken der Pfeil-Tasten in der Tabelle navigiert wird.

Ich freue mich auf kreative Ideen.

Danke Schön!

Sharkey2022


public static void main(String[] args) {

		Display display = new Display();

		Shell shell = new Shell(display);

		shell.setLayout(new GridLayout());


		// create a a table with 3 columns and fill with data

		final Table table = new Table(shell, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);

		table.setLayoutData(new GridData(GridData.FILL_BOTH));

		TableColumn column1 = new TableColumn(table, SWT.NONE);

		TableColumn column2 = new TableColumn(table, SWT.NONE);

		TableColumn column3 = new TableColumn(table, SWT.NONE);

		for (int i = 0; i < 100; i++) {

			TableItem item = new TableItem(table, SWT.NONE);

			item.setText(new String[] { "cell "+i+" 0", "cell "+i+" 1", "cell "+i+" 2"});

		}

		column1.pack();

		column2.pack();

		column3.pack();


		// create a TableCursor to navigate around the table

		final TableCursor cursor = new TableCursor(table, SWT.NONE);

		// create an editor to edit the cell when the user hits "ENTER" 

		// while over a cell in the table

		final ControlEditor editor = new ControlEditor(cursor);

		editor.grabHorizontal = true;

		editor.grabVertical = true;


		cursor.addSelectionListener(new SelectionAdapter() {

			// when the TableEditor is over a cell, select the corresponding row in 

			// the table

			public void widgetSelected(SelectionEvent e) {

				table.setSelection(new TableItem[] {cursor.getRow()});

			}

			// when the user hits "ENTER" in the TableCursor, pop up a text editor so that 

			// they can change the text of the cell

			public void widgetDefaultSelected(SelectionEvent e){

				final Text text = new Text(cursor, SWT.NONE);

				TableItem row = cursor.getRow();

				int column = cursor.getColumn();

				text.setText(row.getText(column));

				text.addKeyListener(new KeyAdapter() {

					public void keyPressed(KeyEvent e) {

						// close the text editor and copy the data over 

						// when the user hits "ENTER"

						if (e.character == SWT.CR) {

							TableItem row = cursor.getRow();

							int column = cursor.getColumn();

							row.setText(column, text.getText());

							text.dispose();

						}

						// close the text editor when the user hits "ESC"

						if (e.character == SWT.ESC) {

							text.dispose();

						}

					}

				});

				editor.setEditor(text);

				text.setFocus();

			}

		});

		// Hide the TableCursor when the user hits the "MOD1" or "MOD2" key.

		// This alows the user to select multiple items in the table.

		cursor.addKeyListener(new KeyAdapter() {

			public void keyPressed(KeyEvent e) {

				if (e.keyCode == SWT.MOD1 || 

				    e.keyCode == SWT.MOD2 || 

				    (e.stateMask & SWT.MOD1) != 0 || 

				    (e.stateMask & SWT.MOD2) != 0) {

					cursor.setVisible(false);

				}

			}

		});

		// Show the TableCursor when the user releases the "MOD2" or "MOD1" key.

		// This signals the end of the multiple selection task.

		table.addKeyListener(new KeyAdapter() {

			public void keyReleased(KeyEvent e) {

				if (e.keyCode == SWT.MOD1 && (e.stateMask & SWT.MOD2) != 0) return;

				if (e.keyCode == SWT.MOD2 && (e.stateMask & SWT.MOD1) != 0) return;

				if (e.keyCode != SWT.MOD1 && (e.stateMask & SWT.MOD1) != 0) return;

				if (e.keyCode != SWT.MOD2 && (e.stateMask & SWT.MOD2) != 0) return;


				TableItem[] selection = table.getSelection();

				TableItem row = (selection.length == 0) ? table.getItem(table.getTopIndex()) : selection[0];

				table.showItem(row);

				cursor.setSelection(row, 0);

				cursor.setVisible(true);

				cursor.setFocus();

			}

		});


		shell.open();

		while (!shell.isDisposed()) {

			if (!display.readAndDispatch())

				display.sleep();

		}

		display.dispose();

	}


Servus,

hänge doch mal einen KeyListener an den TableCursor, dann kannst Du beim KeyEvent den Editor aktiv schalten. Das gleiche gilt natürlich auch für einen MouseListener.

Wir haben das bei uns in der Arbeit auch gemacht, läuft ganz gut.

Peter

Danke kingofbrain,

nach ein bissl rumprobieren, läuft es jetzt wie geschmiert. :):):)

Sharkey2022

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.