2015-11-09 2 views
1

У меня есть Tableviewer, в котором объекты добавляются очень быстро, и мне нужно, чтобы пользователь мог выбирать определенные элементы. Проблема в том, что я не могу найти способ сделать прокрутку прокрутки прокрутки. Я просто хочу кнопку, которая блокирует таблицу в текущей позиции.Как заблокировать swt Table или Jface tableviewer scrollbar

Возможно, у вас есть ответ.

+0

Возможный дубликат: http://stackoverflow.com/questions/12163085/how-to-scroll -Блокировка-а-JFace-TableViewer. Отправьте свой примерный код, после чего кто-то может дать вам решение. –

+0

Я видел этот ответ, но тот не работал для меня. – todayihateprogramming

+0

Какой пример кода вы ожидаете? У меня есть таблица и кнопка, и в моем SelectionListener я хочу заблокировать панель прокрутки. Я мог бы предоставить вам имена переменных, но это не кажется очень полезным. – todayihateprogramming

ответ

0

[Edit] : Вы можете использовать Переключить кнопку в консоли Eclipse, есть. Вам нужно поддерживать ниже двух состояний кнопки.

  1. стол # setSelection (пункт) будет выбрать последний пункт в зависимости от того будет добавлен. (Auto Scroll)
  2. TableViewer # обновления (объект, истина, ложь) может быть использован для сохранения выбора (Scroll Lock).

Здесь я создал Snippet, который поможет вам понять, как использовать обновления в TableViewer:

public class SamplePart { 
private static int i = 1; 
private Text txtInput; 
private TableViewer tableViewer; 

@Inject 
private MDirtyable dirty; 
private Table table; 
private TableColumn column; 
private Button btnNewButton; 

@PostConstruct 
public void createComposite(Composite parent) { 
    parent.setLayout(new GridLayout(2, false)); 
    txtInput = new Text(parent, SWT.BORDER); 
    txtInput.setMessage("Enter text to mark part as dirty"); 
    txtInput.addModifyListener(new ModifyListener() { 
     @Override 
     public void modifyText(ModifyEvent e) { 
      dirty.setDirty(true); 
     } 
    }); 
    txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
    btnNewButton = new Button(parent, SWT.TOGGLE); 
    btnNewButton.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      if(!btnNewButton.getSelection()){ 
       //once button is pressed it will preserve the selection 
       tableViewer.refresh(table , true, false); 
      } 
     } 
    }); 
    btnNewButton.setText("scroll"); 
    tableViewer = new TableViewer(parent); 
    table = tableViewer.getTable(); 
    column = new TableColumn(table, SWT.NONE); 
    column.setText("Column " + 0); 
    TableItem item = new TableItem(table, SWT.NONE); 
    item.setText(0, "sample Item "); 
    GridData gridData = new GridData(GridData.FILL_BOTH); 
    gridData.horizontalSpan = 2; 
    gridData.widthHint = 440; 
    tableViewer.getTable().setLayoutData(gridData); 
    Job job = new Job("UI") { 
     @Override 
     protected IStatus run(IProgressMonitor monitor) { 
      for(int j = 1 ; j<10000000; j++){ 
       Display.getDefault().syncExec(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          Thread.currentThread().sleep(100); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
         addItem(); 
         table.getColumn(0).pack(); 
        } 
       }); 
      } 
      return ASYNC_FINISH; 
     } 
    }; 
    job.schedule(); 
} 

private void addItem() { 
    i++; 
    TableItem item = new TableItem(table, SWT.NONE); 
    item.setText(0, "sample Item "+i); 
    if(!btnNewButton.getSelection()){ 
     table.setSelection(item); 
    } 
} 

@Focus 
public void setFocus() { 
    tableViewer.getTable().setFocus(); 
} 

@Persist 
public void save() { 
    dirty.setDirty(false); 
} 
} 
Смежные вопросы