2017-05-10 1 views
1

Actuellement, j'ai un petit bug lorsque vous utilisez TreeEditor. Mon code:Java TreeEditor UI bug

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(); 
    } 
} 

Lorsque je clique sur le texte de la ligne de fond ("point 12"), OS défiler vers le bas 1 ligne automatiquement. Mais quand je regarde ProgressBar ToolTip, la barre de progression "item 12" affiche 11%. Cela signifie que la barre de progression ne défile pas d'une ligne vers le bas. Comment puis-je résoudre ce problème? Je vous remercie.

Répondre

1

Cela me semble un bug que la colonne entière (lors de la configuration en utilisant un ControlEditor) ne défile pas automatiquement avec les autres. Les bogues peuvent être rapportés ici: Eclipse Bugzilla.

Il ne semble pas que ce soit le ProgressBar qui pose problème. Si vous le remplacez par un Label, par exemple, vous aurez le même problème.

Une solution de contournement possible qui semble fonctionner serait d'appeler la méthode setSelection(TreeItem[]) dans un écouteur. Cela semble amener la colonne à se corriger.

Par exemple:

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

Obtenir les sélectionnés TreeItem s puis les mettre devraient être de retour assez anodin tant que votre application ne fait rien de spécial autour SelectionEvent s sur la Tree.

+0

Merci pour votre aide. Ça marche. Mais je pense que c'est comme un tour: D –

+0

@DucTran De rien! Oui, c'est certainement plus une astuce car je suis assez convaincu que c'est un bug d'Eclipse. Si vous ne l'avez pas encore fait, il vaut vraiment la peine de signaler le bug via le lien que j'ai fourni! – avojak