2016-12-09 2 views
0

Ich hätte gerne einen Tisch, dessen Höhe genau auf die Anzahl der Gegenstände abgestimmt ist. Ich arbeite mit SWT und ich verwende eine GridLayout. Dies ist ein Auszug aus meinem Code:Wie kann die Tischhöhe mit GridLayout an die Anzahl der Objekte in SWT angepasst werden?

Table table = new Table(parent, SWT.BORDER); 
table.setHeaderVisible(true); 
table.setLinesVisible(true); 
TableColumn tc1 = new TableColumn(table, SWT.CENTER); 
TableColumn tc2 = new TableColumn(table, SWT.CENTER); 
tc1.setText("Column1"); 
tc2.setText("Column2"); 
tc1.setWidth(85); 
tc2.setWidth(90); 

for (int i = 0; i < 3; i++) { 
    TableItem item = new TableItem(table, SWT.NONE); 
    item.setText(0, "Text Column1"); 
    item.setText(1, "Text Column2"); 
} 

GridData gridData = new GridData(tc1.getWidth()+tc2.getWidth()-17, ???); 
table.setLayoutData(gridData); 

Für die Breite habe ich eine Formel gefunden. Aber für die Höhe?

Antwort

0

Verwenden Sie Table::getItemHeight(), um die erforderliche Client-Höhe für die angegebene Anzahl für Elemente zu berechnen. Verwenden Sie dann computeTrim(), um die Grenzen für die angegebene Client-Höhe zu berechnen. Wenn Gitterlinien angezeigt werden, wird die Breite jeder Trennlinie hinzugefügt. Und schließlich können Sie die heightHint von GridData verwenden, um die GridLayout zu benachrichtigen, eine bestimmte Höhe für die Tabelle zu reservieren.

Zum Beispiel:

int clientWidth = ... 
int clientHeight = table.getItemHeight * numberOfItems; 
if(table.getLinesVisible() && numberOfItems > 0) { 
    clientHeight += table.getGridLineWidth() * (numberOfItems - 1); 
} 
Rectangle bounds = table.computeTrim(0, 0, clientWidth, clientHeight); 

GridData gridData = new GridData(SWT.DEFAULT, clientHeight); 

Wenn die Client-Breite an anderer Stelle berechnet wird, können Sie auch auf Null gesetzt.

+0

Vielen Dank! int clientHeight = (table.getItemHeight() * items.length) +7; funktioniert für mich – LCP

+0

Wenn Sie konstante Pixel-Offsets wie '7' verwenden, beachten Sie bitte, dass diese nicht für alle Plattformen/Bildschirmauflösungen/Umgebungseinstellungen funktionieren. –

+0

Danke für den Hinweis! – LCP

Verwandte Themen