Я не знаю, возможно ли вообще предотвратить это, но вы можете обработать результат перемещения столбца и реагировать на него, чтобы достичь того, чего вы хотите.
Может быть, что-то в этом роде было бы хорошей отправной точкой? По сути, он прослушивает перемещение первого столбца (не напрямую, а смещение в результате перемещения другого столбца слева от него), а затем перетасовывает порядок, чтобы визуально снова был первым столбцом.
Обратите внимание, что независимо от визуального порядка первый созданный столбец всегда будет нулевым (и т. Д.). Метод tree.getColumnOrder () будет упорядочен визуально, со значениями, являющимися индексами созданного порядка (поэтому, если вы поменяете местами 2-й и 3-й столбцы, метод вернет [0, 2, 1, 3, 4])
for (int i = 0; i < 5; i++) {
TreeColumn column = new TreeColumn(tree, SWT.CENTER);
column.setText("Col " + i);
column.setWidth(60);
if (i > 0) column.setMoveable(true);
// NEW CODE HERE
if (i == 0) {
column.addControlListener(new ControlAdapter() {
public void controlMoved(ControlEvent e) {
List<Integer> newOrder = new ArrayList<Integer>();
// add the first
newOrder.add(0);
// loop around all columns
for (int col : tree.getColumnOrder()) {
// if not the first that was added, add to list
if (col != 0) {
newOrder.add(col);
}
}
// convert list to array
int[] newOrderArray = new int[newOrder.size()];
for (int j = 0; j < newOrder.size(); j++) {
newOrderArray[j] = newOrder.get(j);
}
// update tree order
tree.setColumnOrder(newOrderArray);
}
});
}
}