如果没有触发selectchange事件,那就是jdk的bug
你用到jdk是那个版本的,jbuilder是那个版本的
jdk1.3的focus有上百个bug,我们现在做东西,改jdk的bug把头都改大了
这个问题你可以自己想办法,在每次删除节点后手工调用valueChanged
你用到jdk是那个版本的,jbuilder是那个版本的
jdk1.3的focus有上百个bug,我们现在做东西,改jdk的bug把头都改大了
这个问题你可以自己想办法,在每次删除节点后手工调用valueChanged
解决方案 »
- 在NIO中,如何同步接收线程池中返回的处理结果,同时做到不阻塞程序?
- 哪位大哥教教我线程的这段代码(一共20行)谢谢啦!!!!
- 执行后hibernate并没有添加修改mysql中的数据,在线请教
- 关于Tooltip,谢谢大家!
- 我的ApplicationResources.properties,messages.properties老是出问题
- 关于LookAndFeel的奇怪问题?谁能帮帮我啊
- 一个editplus下的main参数问题
- 大家看看,我在dos下面运行的java Char1怎么显示的字符是乱码,该怎么解决????
- 我是一个Java菜鸟,请教高手
- 在文件中再次追加学生信息时,怎么实现序列号 是从之前已经有的开始,例如之前已经有2个学生,下次追加从3开始
- 请求帮助?SOS SOS SOS SOS SOS SOS!!!!
- 数据源有时正常,有时抛出异常!!!!!!!!!!!
2.用 addSelectionPath(TreePath path)至于 valueChanged 事件 正如 fightboy(樱桃小蚊子) 所说的,你得自己调用了
DefaultMutableTreeNode对象的getPath()方法返回的时TreeNode[],而JTree的addSelectionPath(TreePath path)方法参数是TreePath类型,参数类型不匹配啊?
public Object[] getUserObjectPath()
然后new TreePath(Object[])
得到treepath
public Object[] getUserObjectPath()
然后new TreePath(Object[])
得到treepath
public Object[] getUserObjectPath()
然后new TreePath(Object[])
得到treepath
我的代码如下://删除结点,selparent是父结点对象
Object[] po = selparent.getUserObjectPath();
TreePath pth = new TreePath(po);
jTreeScoreTb.addSelectionPath(pth);
treeModel.reload();
public void setSelectionPath(TreePath path)
如何?
我也试过的,一样没反应,是不是reload()的问题?
DefaultMutableTreeNode selparent = (DefaultMutableTreeNode)selnd.getParent();
selparent.remove(selnd);
treeModel.reload();
//选中父结点
Object[] po = selparent.getUserObjectPath();
TreePath pth = new TreePath(po);
Object[] po = selparent.getUserObjectPath();
TreePath pth = new TreePath(po);
jTreeScoreTb.addSelectionPath(pth); //jTreeScoreTb.setSelectionPath(pth);换过来也没反应
treeModel.reload();
selparent.remove(selnd);
使用了这一条之后必须使用
treeModel.reload();
来刷新整个树
而这样selection和expand状态就完全改变了。请参考下边的例子:
使用
_model.removeNodeFromParent(node);
来删除一个节点:import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;public class Test extends JFrame {
JTree _tree = new JTree();
DefaultTreeModel _model = (DefaultTreeModel)_tree.getModel();
TreeSelectionModel _selectionModel = _tree.getSelectionModel();
JButton _removeButton = new JButton("Remove selected node"); public Test()
{
Container contentPane = getContentPane();
_selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); contentPane.add(new ControlPanel(), BorderLayout.NORTH);
contentPane.add(_tree, BorderLayout.CENTER); _tree.addTreeSelectionListener(new TreeSelectionListener(){ public void valueChanged(TreeSelectionEvent e)
{
TreePath path = e.getNewLeadSelectionPath();
boolean nodesAreSelected = (path != null);
_removeButton.setEnabled(nodesAreSelected);
}
});
}
class ControlPanel extends JPanel
{
public ControlPanel()
{
_removeButton.setEnabled(false);
add(_removeButton);
_removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath path =
_selectionModel.getSelectionPath(); if(path.getPathCount() == 1) {
JOptionPane.showMessageDialog(ControlPanel.this,
"Can't remove root node!");
return;
} MutableTreeNode node =
(MutableTreeNode)path.getLastPathComponent();
TreePath parentPath = path.getParentPath(); _model.removeNodeFromParent(node); _tree.setSelectionPath(parentPath);
}
});
}
}
public static void main(String args[]) {
GraphicJavaApplication.launch(new Test(),
"_tree Model Example",300,300,450,300);
}
}
class GraphicJavaApplication extends WindowAdapter
{
public static void launch(final JFrame f, String title,
final int x, final int y,
final int w, int h)
{
f.setTitle(title);
f.setBounds(x,y,w,h);
f.setVisible(true);
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.addWindowListener(new WindowAdapter()
{
public void windowClosed(WindowEvent e)
{
System.exit(0);
}
});
}
}
十分感谢!
马上给分