2017-02-15 43 views
0

я попытался использовать тот же самый пример TreeCursor документации: http://git.eclipse.org/c/platform/eclipse.platform.swt.git/plain/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet360.javaЗатмение SWT TreeCursor всегда имеет текст, выбранный из ячейки, который был выбран в первый раз

В зависимости от того, клеток я нажимаю войти (SWT.CR) впервые, скажем, Я нажимаю на ячейку «root11», после чего появляется какая-то ячейка, которую я нажимаю, «root11». Мое требование - выбрать текст из ячейки для копирования. Я не хочу редактировать. Поэтому каждый раз, когда я нажимаю на ячейку для копирования ее текста, появляется текст из ячейки, которая была выбрана в первый раз.

Любые указания на то, что может быть причиной этого? Спасибо заранее!

ответ

0

При нажатии на элемент ENTER вызывается метод widgetDefaultSelected. Там ControlEditor устанавливает Text с выбранным текстом TreeItem в качестве своего редактора: editor.setEditor(text);.

Этот Text тогда используется только тогда, когда на него нажимают ENTER или ESC, и ни в коем случае. Это означает, что Text будет по-прежнему отображаться с его исходным содержимым, даже если вы выберете другой элемент.

Чтобы изменить это поведение, вы можете изменить метод widgetSelected, чтобы, например, удалить Text, чтобы он больше не был виден или обновил его текст с помощью текущего выбранного элемента.

Чтобы удалить Text:

@Override 
public void widgetSelected(SelectionEvent e) { 

    // get the current editor 
    Text text = (Text) editor.getEditor(); 

    if (text != null && !text.isDisposed()) { 
     // remove the editor 
     text.dispose(); 
    } 

    tree.setSelection(new TreeItem[] { cursor.getRow() }); 
} 

Чтобы обновить Text содержание:

@Override 
public void widgetSelected(SelectionEvent e) { 

    // get the current editor 
    Text text = (Text) editor.getEditor(); 

    if (text != null && !text.isDisposed()) { 
     // update the text in the editor 
     TreeItem row = cursor.getRow(); 
     int column = cursor.getColumn(); 
     text.setText(row.getText(column)); 
    } 

    tree.setSelection(new TreeItem[] { cursor.getRow() }); 
} 
+0

Спасибо за тонну за быстрый ответ! Оно работает :) – Vrinda