2016-06-27 5 views
-1

Ich möchte automatisch - Restrate NatTable dynamisch nach der Anzahl der Zeilen. Mit anderen Worten, ich habe eine Höhe von 'x' mit 10 Zeilen. Wenn Zeilen weniger als 10 sind, sollte sich die Höhe von nattable reduzieren, so dass kein leerer Platz mehr zu sehen ist. Wenn die Anzahl der Zeilen 10 überschreitet, sollte die vertikale Bildlaufleiste angezeigt werden.Auto - Resize NatTable dynamisch

Antwort

0

Das ist eine SWT-Layout-Frage am Ende. Grundsätzlich fragen Sie nach einer Möglichkeit, eine Mindesthöhe basierend auf dem Tabelleninhalt anzugeben. Sie können dies mit einem GridLayout und einem Resize-Listener lösen, der die Mindesthöhe abhängig von der verfügbaren Containerhöhe aktualisiert.

Composite panel = new Composite(parent, SWT.NONE); 
panel.setLayout(new GridLayout()); 
NatTable natTable = new NatTable(panel); 

// minimum height of NatTable + scrollbar 
int minHeight = natTable.getPreferredHeight() + 18; 

GridDataFactory 
    .swtDefaults() 
    .align(SWT.FILL, SWT.BEGINNING) 
    .grab(true, true) 
    .minSize(SWT.DEFAULT, minHeight) 
    .applyTo(natTable); 

panel.addListener(SWT.Resize, new Listener() { 

    @Override 
    public void handleEvent(Event event) { 
     GridData data = ((GridData) natTable.getLayoutData()); 
     // minHeight + 10 because of the margins 
     if (panel.getBounds().height < (minHeight + 10)) { 
      data.minimumHeight = SWT.DEFAULT; 
      data.verticalAlignment = SWT.FILL; 
     } else { 
      data.minimumHeight = minHeight; 
      data.verticalAlignment = SWT.BEGINNING; 
     } 
    } 
}); 

Beachten Sie, dass dies nur eine Lösung dafür ist. Abhängig vom Layout, das Sie verwenden, könnte es elegantere geben.