Я пытаюсь упаковать столбцы дерева SWT, чтобы каждый столбец был достаточно широким для отображения текста заголовка, даже если элементы дерева для этого столбца пусты.
Вот мой пример кода который показывает проблему:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
public class TestTreePacking {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display, SWT.DIALOG_TRIM);
shell.setLayout(new FillLayout());
// Create tree with 3 columns
Tree tree = new Tree(shell, SWT.CHECK);
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
for (int i = 0; i < 3; ++i) {
TreeColumn col = new TreeColumn(tree, SWT.NONE);
col.setText("Column " + i);
}
shell.pack();
shell.setSize(400, 100);
shell.open();
// Create a tree item, leaving the second/middle column blank
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText(0, "Test first col");
item.setText(2, "Test last col");
// Pack all columns
for (TreeColumn column : tree.getColumns()) {
column.pack();
// column.pack();
}
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Это приводит к этому:

Если я раскомментирую второй column.pack()
вызов, Я получаю желаемый результат:

Это кажется отвратительным, и я не понимаю, почему это работает, когда один пакет не работает. Есть ли лучший способ выполнить sh это?
В случае, если это имеет значение, я нахожусь на CentOS, используя MATE 1.16.2, Eclipse 4.12.0 и GTK 3.22.30.