Wie immer zeigen Sie die vertikale Bildlaufleiste in der SWT-Tabelle?
Ist es möglich, dass stets die vertikale Bildlaufleiste in eine SWT Tabelle, auch wenn die Tabelle leer ist? Durch die immer zeigen eine (mögliche deaktiviert) vertikale Bildlaufleiste kann man vermeiden, dass die Letzte Spalte teilweise ausgeblendet, wenn die Spalten verwenden ColumnWeightData
für layouting.
Ich versucht, initialisieren Sie die Tabelle mit SWT.V_SCROLL
oder verwenden table.getVerticalBar().setVisible(true)
- beide ohne Erfolg.
Es ist eine Methode setAlwaysShowScrollBars
im ScrollableComposite
. Was ich Suche ist eine ähnliche Methode in Table
.
UPDATE: ich nehme an, dass die scroll-bars, die sind sichtbar, wenn die Tabelle, genug Daten enthält, sind nicht diejenigen, die Bildlaufleisten, die Table
erbt von Scrollable
. Ich habe gedebuggt ScrollBar.setVisible(boolean)
und es scheint nicht aufgerufen werden, auf dem tabellenlay-out-updates. Ist diese Beobachtung richtig?
UPDATE 2: Hier ist ein snippet für eine Tisch-Konstruktion. Es wäre toll, wenn die vertikale Bildlaufleiste sichtbar ist, auch wenn die Tabelle leer ist und die Spaltenüberschriften sichtbar, auch wenn die Daten der Tabelle werden nach unten gescrollt. Hinweis: Das snippet hat Links einige details wie das label-Anbieter und einige andere Steuerelemente angeordnet, an der gleichen parent-composite.
protected void createMasterPart(final IManagedForm managedForm, Composite parentComposite)
{
FormToolkit toolkit = managedForm.getToolkit();
Composite contentComposite = toolkit.createComposite(parentComposite, SWT.NONE);
contentComposite.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
toolkit.paintBordersFor(contentComposite);
contentComposite.setLayout(new GridLayout(2, false));
GridData gd;
Composite tableComposite = new Composite(contentComposite, SWT.NONE);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
tableComposite.setLayout(tableColumnLayout);
gd = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 3);
tableComposite.setLayoutData(gd);
speakerTableViewer = new TableViewer(tableComposite, SWT.BORDER | SWT.FULL_SELECTION);
speakerTableViewer.setContentProvider(ArrayContentProvider.getInstance());
Table speakerTable = speakerTableViewer.getTable();
speakerTable.setHeaderVisible(true);
speakerTable.setLinesVisible(true);
toolkit.paintBordersFor(speakerTable);
TableViewerColumn tableViewerAudiosampleColumn = new TableViewerColumn(speakerTableViewer, SWT.NONE);
TableColumn audiosampleColumn = tableViewerAudiosampleColumn.getColumn();
tableColumnLayout.setColumnData(audiosampleColumn, new ColumnWeightData(60, true));
audiosampleColumn.setText("Sample");
TableViewerColumn tableViewerSpeakerColumn = new TableViewerColumn(speakerTableViewer, SWT.NONE);
TableColumn speakerColumn = tableViewerSpeakerColumn.getColumn();
tableColumnLayout.setColumnData(speakerColumn, new ColumnWeightData(60, true));
speakerColumn.setText("Speaker");
TableViewerColumn tableViewerRemarkColumn = new TableViewerColumn(speakerTableViewer, SWT.NONE);
TableColumn remarkColumn = tableViewerRemarkColumn.getColumn();
tableColumnLayout.setColumnData(remarkColumn, new ColumnWeightData(120, true));
remarkColumn.setText("Remark");
}
- Wickeln Sie Ihren Tisch im panel.
- Was meinst du mit
panel
? - warum würden Sie die display-Bildlaufleiste für eine leere Tabelle mit Daten?
- Könnten Sie
org.eclipse.jface.layout.TableColumnLayout
die sollten passen Sie die Spaltengröße wird, wenn die Bildlaufleiste angezeigt wird. - Ich möchte vermeiden, dass die Letzte Spalte ist teilweise ausgeblendet, wenn zunächst die Tabelle keine Bildlaufleisten und später auf die scrollbars angezeigt werden. Außerdem möchte ich vermeiden, dass die Säulen in der Größe verändert, unter solchen Umständen.
- Ich verwende bereits
TableColumnLayout
. Ich möchte vermeiden, dass die Säulen in der Größe verändert, sobald die scrollbar angezeigt. - Aktualisiert meine Antwort, bitte haben Sie einen Blick.
- Aktualisierte Antwort wieder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alternativen
Recht, ich kam mit einer Lösung, sehr ähnlich wie meine Antwort auf diese Frage:
Ist es möglich, die vertikale/horizontale Bildlaufleiste sichtbar, wenn die SWT-Liste ist im deaktivierten Zustand?
Die Idee ist, eine
ScrolledComposite
(wie die andere Antwort schon vorgeschlagen) zu kümmern scrollen. DieTable
sich nicht scrollen. Jedoch, das nicht keinen Unterschied machen, weil der Benutzer nicht in der Lage, den Unterschied zu erkennen.ScrolledComposite
hat eine Methode namenssetAlwaysShowScrollBars(boolean)
mit denen Sie erzwingen, dass es immer der scroll-Balken, auch wenn Sie nicht benötigt werden.Hier einige code-Beispiele, die illustrieren, was ich gerade gesprochen habe:
Sieht wie folgt aus:
Wie Sie sehen können, wird die Bildlaufleiste immer sichtbar.
UPDATE
Wie schon in den Kommentar, dieser Ansatz wird nicht halten die
Table
Header sichtbar, wenn Sie nach unten scrollen. Wenn du posten könntest eine kleine Arbeit code-Beispiel, das zeigt Ihr problem, wir könnten kommen mit einer alternative (ohne Beziehung zu zwingen, die scroll bars).UPDATE2
Hier ist etwas code, der sollte das tun, was Sie wollen, der trick ist, die zum auslösen eines resize-Ereignis des übergeordneten
TableViewer
die horizontale Bildlaufleiste angezeigt wird, ist nicht wirklich notwendig, und es verschwindet, nachdem Sie die Größe des Fensters ändern:Table
s.TableItem
s, bis es genug von Ihnen, um die Bildlaufleisten angezeigt werden, aber das ist eine Straße, die Sie nicht wollen, zu gehen.Habe ich eine Lösung, dass ich denke, ist besser, als deine Tabelle innerhalb einer ScrolledComposite.
Meine Lösung: füllen meine Tabelle mit leere Elemente, bis mein Bildlaufleiste sichtbar ist.
Beispiel:
Ich hoffe, dass diese Lösung jemandem hilft.
Dank.
Ich glaube nicht, können Sie dies tun, aber Sie können versuchen, rufen Sie ScrolledComposite.setAlwaysShowScrollbars() auf true, aber Sie sehen beide die scrollbars aktiviert alle die Zeit.
ScrollableComposite
und ist nicht in einemScrollableComposite
. Was istScrolledComposite
?