2017-05-10 44 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