JTree中TreeSelection触发的问题 就是说当我在我的JTree上从一个节点A移到另一个节点B的时候,触发的是TreeSelection的事件,但是这个事件的现态是已经在B那儿了,我是想问有没有除了TreeSelection之外的listener,可以触发我想移动但却还没有移动的那一瞬间的事件?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能不能根据ChangedEvent事件从新定义一个,读取ChangedEvent的值 嗯,我试过了,但是可恶的是changeEvent事件总是在treeselection后触发,而我所做的事情都是要在TreeSelection事件中发生的,但是需要在changeEvent事件中取到指才行,郁闷啊。 jTree1.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent evt) { // Get all nodes whose selection status has changed TreePath[] paths = evt.getPaths(); // Iterate through all affected nodes for (int i=0; i<paths.length; i++) { if (evt.isAddedPath(i)) { System.out.println("被选中 " + paths[i].toString()); } else { System.out.println("取消选中"+ paths[i].toString()); } } } }); 你是否想操作上一次选择的树节点?那样的话用一个全局变量记录lastPathComponentjiu 就好了 public void valueChanged(TreeSelectionEvent event){ int changeFlag = 0; int nodeAttrFlag = 0; TreePath treePath = event.getOldLeadSelectionPath(); mOldTreePath = treePath; Node lastNode = null; DefaultMutableTreeNode lastTreeNode = null; if (treePath != null){ lastTreeNode = (DefaultMutableTreeNode)(treePath.getLastPathComponent()); } if (lastTreeNode != null){ lastNode = getNode(lastTreeNode); } if (lastNode != null){ mBaseModel.setNode(lastNode); if (mBaseModel.isItemChanged()){ nodeAttrFlag = 1; }else{ nodeAttrFlag = 0; } } if (nodeAttrFlag ==1){ int value = JOptionPane.showConfirmDialog(mFrame,"are you sure?","if moved",JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE); if (value == JOptionPane.NO_OPTION){ setCurrentPath(mOriPathrow); changeFlag =1; }else { changeFlag = 0; } } if (changeFlag == 0){ Node selectedNode = null; path = getSelectionPath(); if (path==null) return; DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)path.getLastPathComponent(); selectedNode = getNode(treeNode); mBaseModel.setEditNode(selectedNode); mBaseModel.show(); mOriPathrow = this.getMaxSelectionRow(); } }这是我的方法,不好意思,写的比较乱。里面有一句mBaseModel.isItemChanged()方法,是这么写的(我简化了): public boolean isItemChanged(){ boolean changed = true; if( (((Element)mNode).getAttribute("name")).equals((String)mNameComboBox.getSelectedItem()) &&(((Element)mNode).getAttribute("value")).equals((String)mValueComboBox.getSelectedItem()) ) changed = false; return changed; }其中的mNameComboBox是个普通的JComboBox,而mValueComboBox是一个设置了setEditable(true)的JComboBox,就这么点区别,导致了结果不同,用mNameComboBox完全正常,但是mValueComboBox就不正常了 java unicode 转中文 如何调用JFrame的windowClosing方法 有没有做金蝶外包开发的,进来说一下感受 集合问题。。 请问java能不能实现delphi中with..do的功能 有没有判断图片大小的代码(java 或者javascript ) 请教各位用过TEXTPAD的大哥们 请问java支持什么声音类的文件??并且怎么调用? 紧急求助,谢谢各位 如何用COM实现把一个文件从CLIENT端传送到SERVER端,保存在SERVER本地。 大哥们这是我最后30分了,全给了!是关于JTree的一个很简单的问题 菜鸟问答
public void valueChanged(TreeSelectionEvent evt) {
// Get all nodes whose selection status has changed
TreePath[] paths = evt.getPaths(); // Iterate through all affected nodes
for (int i=0; i<paths.length; i++) {
if (evt.isAddedPath(i)) {
System.out.println("被选中 " + paths[i].toString());
} else {
System.out.println("取消选中"+ paths[i].toString());
}
}
}
});
int changeFlag = 0;
int nodeAttrFlag = 0; TreePath treePath = event.getOldLeadSelectionPath();
mOldTreePath = treePath;
Node lastNode = null;
DefaultMutableTreeNode lastTreeNode = null;
if (treePath != null){
lastTreeNode = (DefaultMutableTreeNode)(treePath.getLastPathComponent());
}
if (lastTreeNode != null){
lastNode = getNode(lastTreeNode); }
if (lastNode != null){
mBaseModel.setNode(lastNode);
if (mBaseModel.isItemChanged()){
nodeAttrFlag = 1;
}else{
nodeAttrFlag = 0;
} } if (nodeAttrFlag ==1){
int value = JOptionPane.showConfirmDialog(mFrame,"are you sure?","if moved",JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE);
if (value == JOptionPane.NO_OPTION){
setCurrentPath(mOriPathrow);
changeFlag =1;
}else {
changeFlag = 0;
}
}
if (changeFlag == 0){
Node selectedNode = null;
path = getSelectionPath();
if (path==null) return;
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)path.getLastPathComponent();
selectedNode = getNode(treeNode);
mBaseModel.setEditNode(selectedNode);
mBaseModel.show();
mOriPathrow = this.getMaxSelectionRow();
} }
这是我的方法,不好意思,写的比较乱。里面有一句mBaseModel.isItemChanged()方法,是这么写的(我简化了):
public boolean isItemChanged(){
boolean changed = true;
if(
(((Element)mNode).getAttribute("name")).equals((String)mNameComboBox.getSelectedItem())
&&(((Element)mNode).getAttribute("value")).equals((String)mValueComboBox.getSelectedItem())
) changed = false;
return changed;
}其中的mNameComboBox是个普通的JComboBox,而mValueComboBox是一个设置了setEditable(true)的JComboBox,就这么点区别,导致了结果不同,用mNameComboBox完全正常,但是mValueComboBox就不正常了