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)
>
> ************************************************************************