2017-05-10 79 views
1

目前我使用TreeEditor時有小錯誤。我的代碼:Java TreeEditor用戶界面錯誤

package test; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.TreeEditor; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.events.SelectionListener; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.ProgressBar; 
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 Test { 
    public static void main(String[] args) { 
     Display display = new Display(); 
     final Shell shell = new Shell(display); 
     shell.setLayout(new FillLayout()); 
     Tree tree = new Tree(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
     tree.setHeaderVisible(true); 
     TreeColumn column1 = new TreeColumn(tree, SWT.LEFT); 
     column1.setText("Column 1"); 
     column1.setWidth(200); 
     TreeColumn column2 = new TreeColumn(tree, SWT.CENTER); 
     column2.setText("Column 2"); 
     column2.setWidth(200); 
     TreeColumn column3 = new TreeColumn(tree, SWT.RIGHT); 
     column3.setText("Column 3"); 
     column3.setWidth(200); 
     TreeColumn column4 = new TreeColumn(tree, SWT.LEFT); 
     column4.setText("Column 4"); 
     column4.setWidth(200); 

     for (int i = 0; i < 20; i++) { 
      TreeItem item = new TreeItem(tree, SWT.NONE); 
      item.setText(new String[] { "item " + i, "abc" + i, "percentage " + i }); 
      ProgressBar bar = new ProgressBar(tree, SWT.NULL); 
      bar.setVisible(true); 
      bar.setSelection(i); 
      bar.setToolTipText(i + "%"); 
      TreeEditor editor = new TreeEditor(tree); 
      editor.grabHorizontal = true; 
      editor.grabVertical = true; 
      editor.setEditor(bar, item, 3); 

     } 
     // shell.pack(); 
     shell.setSize(900, 295); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
     display.dispose(); 
    } 
} 

當我點擊最下面一行(「項目12」)的文本,操作系統會自動向下滾動1行。但是當我檢查ProgressBar ToolTip時,「item 12」進度條顯示11%。這意味着進度條不會向下滾動一行。 我該如何解決這個問題?謝謝。

回答

1

看起來像整個列(使用ControlEditor進行設置時)不會自動與其他人一起自動滾動。錯誤可以在這裏報告:Eclipse Bugzilla

它似乎並不是ProgressBar這就是問題所在。例如,如果將其替換爲Label,則會遇到同樣的問題。

似乎可行的一種可能的解決方法是在偵聽器中調用setSelection(TreeItem[])方法。這似乎讓專欄自行糾正。

例如:

tree.addSelectionListener(new SelectionAdapter() { 
    @Override 
    public void widgetSelected(final SelectionEvent e) { 
     tree.setSelection(tree.getSelection()); 
    } 
}); 

獲取選定TreeItem秒,然後將它們設置右後衛應該是相當無害的,只要你的應用程序不會做什麼特別的周圍SelectionEvent S於該Tree

+0

感謝您的幫助。有用。但我認爲這就像一個把戲:D –

+0

@DucTran不客氣!是的,這絕對是一個騙局,因爲我相信這是一個Eclipse錯誤。如果你還沒有,絕對值得通過我提供的鏈接報告錯誤! – avojak