java - JTree select node by clicking anywhere on the row -
i have code taken here allow selection of jtree row clicking anywhere on row. works fine in single row selection mode. however, not sure how modify in order handle multiple row selections. how distinguish case when user make multiple selection(eg. holding down shift or control button while making left mouse click on row)?
import java.awt.rectangle; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import javax.swing.jframe; import javax.swing.jtree; import javax.swing.swingutilities; import javax.swing.tree.defaultmutabletreenode; import javax.swing.tree.treenode; @suppresswarnings("serial") public class navtree extends jtree { private boolean fwholerowselectionenabled; private mouselistener frowselectionlistener; final navtree fthis; public navtree(treenode rootnode) { super(rootnode); fthis = this; init(); } public navtree() { fthis = this; init(); } private void init() { //setcellrenderer(new navtreecellrenderer()); frowselectionlistener = new mouseadapter() { public void mousepressed(mouseevent e) { if (swingutilities.isleftmousebutton(e)) { int closestrow = fthis.getclosestrowforlocation( e.getx(), e.gety()); rectangle closestrowbounds = fthis.getrowbounds(closestrow); if(e.gety() >= closestrowbounds.gety() && e.gety() < closestrowbounds.gety() + closestrowbounds.getheight()) { if(e.getx() > closestrowbounds.getx() && closestrow < fthis.getrowcount()){ fthis.setselectionrow(closestrow); } } else fthis.setselectionrow(-1); } } }; setwholerowselectionenabled(true); } public void setwholerowselectionenabled(boolean wholerowselectionenabled) { fwholerowselectionenabled = wholerowselectionenabled; if (fwholerowselectionenabled) addmouselistener(frowselectionlistener); else removemouselistener(frowselectionlistener); } public boolean iswholerowselectionenabled() { return fwholerowselectionenabled; } public static void main(string[] args) { jframe frame = new jframe(); defaultmutabletreenode root = new defaultmutabletreenode("root"); root.add(new defaultmutabletreenode("child 1")); root.add(new defaultmutabletreenode("child 2")); root.add(new defaultmutabletreenode("child 3")); navtree tree = new navtree(root); frame.add(tree); frame.setsize(200, 300); frame.setvisible(true); } }
use modifier key information of mouseevent. see mouseevent#getmodifiersex more information
Comments
Post a Comment