2016-12-09 1 views
0

Я хотел бы иметь таблицу, высота которой точно скорректирована на количество элементов. Я работаю с SWT, и я использую GridLayout. Это отрывок из моего кода:Как настроить высоту стола на количество элементов в SWT с помощью GridLayout?

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

Для ширины я нашел формулу. Но для высоты?

ответ

0

Используйте Table::getItemHeight() для расчета необходимой высоты клиента для данного номера для предметов. Затем используйте computeTrim() для вычисления границ для заданной высоты клиента. если показаны линии сетки, добавляется ширина каждой разделительной линии. И, наконец, вы можете использовать heightHintGridData, чтобы сообщить GridLayout, чтобы зарезервировать определенную высоту для стола.

Например:

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

Если ширина клиента вычисляется в другом месте, вы также можете установить его в ноль.

+0

Спасибо! int clientHeight = (table.getItemHeight() * items.length) +7; работает для меня – LCP

+0

При использовании постоянных смещений пикселей, таких как «7», имейте в виду, что они не будут работать во всех разрешениях платформы/экрана/настройках среды. –

+0

Спасибо за подсказку! – LCP

Смежные вопросы