Zum Inhalt springen

SWT Tabelle navigieren


Sharkey2022

Empfohlene Beiträge

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();

	}


Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...