You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@pivot.apache.org by "Dr. Stefano Sancese" <st...@sancese.com> on 2011/03/31 17:07:24 UTC

Strange problem with TreeView and Comparator

Hi to all,

I'm working with a GUI based on treeView and I found a problem:

If two TreeNode have the same text AND a comparator is defined for the 
TreeBranch they belong, then is impossible to select (by mouse o by 
arrow key) one of them.

Try this code:

------------------------------------------------------------------------

package test;

import java.util.Comparator;
import org.apache.pivot.collections.ArrayList;
import org.apache.pivot.collections.List;
import org.apache.pivot.collections.Map;
import org.apache.pivot.wtk.Application;
import org.apache.pivot.wtk.DesktopApplicationContext;
import org.apache.pivot.wtk.Display;
import org.apache.pivot.wtk.TreeView;
import org.apache.pivot.wtk.Window;
import org.apache.pivot.wtk.content.TreeBranch;
import org.apache.pivot.wtk.content.TreeNode;

public class Main implements Application {

     private Window window         = new Window();
     private TreeView treeView     = new TreeView();
     private TreeBranch treeBranch = new TreeBranch();
     private TreeNode treeNodeA    = new TreeNode();
     private TreeNode treeNodeB    = new TreeNode();
     private TreeNode treeNodeC    = new TreeNode();

     Comparator<TreeNode> cmpTreeNode = new Comparator<TreeNode>(){

         @Override
         public int compare(TreeNode a, TreeNode b) {

             return (a.getText().compareToIgnoreCase(b.getText()));
         }
     };

     @Override
     public void startup(Display display, Map<String, String> 
properties) throws Exception {

         treeNodeA.setText("Description A"); // SAME DESCRIPTION
         treeNodeA.setUserData("1");

         treeNodeB.setText("Description B");
         treeNodeB.setUserData("2");

         treeNodeC.setText("Description A");     // SAME DESCRIPTION
         treeNodeC.setUserData("3");

         treeBranch.add(treeNodeA);
         treeBranch.add(treeNodeB);
         treeBranch.add(treeNodeC);

         treeBranch.setText("TB1");
         treeBranch.setComparator(cmpTreeNode);

         List<TreeBranch> tb = new ArrayList();

         tb.add(treeBranch);

         treeView.setTreeData(tb);

         window.setContent(treeView);

         window.open(display);
     }

////////////////////////////////////////////////////////////////////////////////

     @Override
     public boolean shutdown(boolean optional) {

         if (window != null) window.close();

         return false;
     }

////////////////////////////////////////////////////////////////////////////////

     @Override
     public void suspend() {}

////////////////////////////////////////////////////////////////////////////////

     @Override
     public void resume() {}

////////////////////////////////////////////////////////////////////////////////

     public static void main(String[] args) {

         args = new String[]{"--width=200", "--height=200", 
"--center=true"};

         DesktopApplicationContext.main(Main.class, args);
     }
}

------------------------------------------------------------------------

If you remove:

treeBranch.setComparator(cmpTreeNode);

everything is fine.



Stefano


-- 
Dr. Stefano Sancese

WatchGuard Certified System Professional - http://www.watchguard.com
Socio Clusit - Associazione Italiana per la Sicurezza Informatica

************************************************************************

In God we trust, all others we monitor (National Security Agency)

************************************************************************


Re: Strange problem with TreeView and Comparator

Posted by Greg Brown <gk...@verizon.net>.
Seems like a legitimate bug. Can you file a JIRA issue?

On Mar 31, 2011, at 11:07 AM, Dr. Stefano Sancese wrote:

> Hi to all,
> 
> I'm working with a GUI based on treeView and I found a problem:
> 
> If two TreeNode have the same text AND a comparator is defined for the TreeBranch they belong, then is impossible to select (by mouse o by arrow key) one of them.
> 
> Try this code:
> 
> 
> package test;
> 
> import java.util.Comparator;
> import org.apache.pivot.collections.ArrayList;
> import org.apache.pivot.collections.List;
> import org.apache.pivot.collections.Map;
> import org.apache.pivot.wtk.Application;
> import org.apache.pivot.wtk.DesktopApplicationContext;
> import org.apache.pivot.wtk.Display;
> import org.apache.pivot.wtk.TreeView;
> import org.apache.pivot.wtk.Window;
> import org.apache.pivot.wtk.content.TreeBranch;
> import org.apache.pivot.wtk.content.TreeNode;
> 
> public class Main implements Application {
> 
>     private Window window         = new Window();
>     private TreeView treeView     = new TreeView();
>     private TreeBranch treeBranch = new TreeBranch();
>     private TreeNode treeNodeA    = new TreeNode();
>     private TreeNode treeNodeB    = new TreeNode();
>     private TreeNode treeNodeC    = new TreeNode();
> 
>     Comparator<TreeNode> cmpTreeNode = new Comparator<TreeNode>(){
> 
>         @Override
>         public int compare(TreeNode a, TreeNode b) {
> 
>             return (a.getText().compareToIgnoreCase(b.getText()));
>         }
>     };
> 
>     @Override
>     public void startup(Display display, Map<String, String> properties) throws Exception {
> 
>         treeNodeA.setText("Description A");     // SAME DESCRIPTION
>         treeNodeA.setUserData("1");
> 
>         treeNodeB.setText("Description B");
>         treeNodeB.setUserData("2");
> 
>         treeNodeC.setText("Description A");     // SAME DESCRIPTION
>         treeNodeC.setUserData("3");
> 
>         treeBranch.add(treeNodeA);
>         treeBranch.add(treeNodeB);
>         treeBranch.add(treeNodeC);
> 
>         treeBranch.setText("TB1");
>         treeBranch.setComparator(cmpTreeNode);
> 
>         List<TreeBranch> tb = new ArrayList();
> 
>         tb.add(treeBranch);
> 
>         treeView.setTreeData(tb);
> 
>         window.setContent(treeView);
> 
>         window.open(display);
>     }
> 
> ////////////////////////////////////////////////////////////////////////////////
> 
>     @Override
>     public boolean shutdown(boolean optional) {
> 
>         if (window != null) window.close();
> 
>         return false;
>     }
> 
> ////////////////////////////////////////////////////////////////////////////////
> 
>     @Override
>     public void suspend() {}
> 
> ////////////////////////////////////////////////////////////////////////////////
> 
>     @Override
>     public void resume() {}
> 
> ////////////////////////////////////////////////////////////////////////////////
> 
>     public static void main(String[] args) {
> 
>         args = new String[]{"--width=200", "--height=200", "--center=true"};
> 
>         DesktopApplicationContext.main(Main.class, args);
>     }
> }
> 
> 
> If you remove:         
> 
> treeBranch.setComparator(cmpTreeNode);
> 
> everything is fine.
> 
> 
> 
> Stefano
> 
> 
> -- 
> Dr. Stefano Sancese
> 
> WatchGuard Certified System Professional - http://www.watchguard.com
> Socio Clusit - Associazione Italiana per la Sicurezza Informatica
> 
> ************************************************************************
> 
> In God we trust, all others we monitor (National Security Agency)
> 
> ************************************************************************