首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DefaultTreeModel的JTree,加载后如何进行视觉刷新?

使用DefaultTreeModel的JTree,加载后如何进行视觉刷新?
EN

Stack Overflow用户
提问于 2011-11-25 00:01:21
回答 1查看 2.4K关注 0票数 0

我一直在这里搜索,找到了这个问题的答案,但似乎无法让它们为我工作。基本上,我有一个在JScrollPane中包含JTree的图形用户界面:

代码语言:javascript
复制
private void initComponents() {

        scroll = new javax.swing.JScrollPane();
        nodo padre = new nodo();
        modeloArbol modelo = new modeloArbol(padre);
        arbol = new arbolNodos(modelo);

我有以下几个类:

代码语言:javascript
复制
public class arbolNodos extends JTree implements Serializable{

    public arbolNodos(TreeModel newModel) {


public class listenerModeloArbol implements TreeModelListener{

//Overriding treeNodes*(TreeModelEvent e)


public class modeloArbol extends DefaultTreeModel implements Serializable{

    public modeloArbol(TreeNode root) {
        super(root);
    }


public class nodo extends DefaultMutableTreeNode implements Serializable{

我还有两个按钮,它们使用XMLEncoder JTree (实际上是检索树的根节点)将(botonGuardarArbol)和retrieve (botonCargarArbol)存储到具有相应actionPerformed侦听器的文件中:

代码语言:javascript
复制
private void botonGuardarArbolActionPerformed(java.awt.event.ActionEvent evt) {                                                  
// TODO add your handling code here:
    try {
        XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("C:\\borrar\\presupuesto")));
        encoder.writeObject(arbol.getModel().getRoot());
        encoder.close();



private void botonCargarArbolActionPerformed(java.awt.event.ActionEvent evt) {                                                 
// TODO add your handling code here:    
    try {
        XMLDecoder decoder = new XMLDecoder( new BufferedInputStream(new FileInputStream("C:\\borrar\\presupuesto")));

        nodo padre = (nodo) decoder.readObject();

        modeloArbol modelo = new modeloArbol(padre);

        decoder.close();

        modelo.setRoot(padre);

    arbolNodos arbolNuevo = null;

        if( modelo != null ){
            arbolNuevo = new arbolNodos(modelo);
            arbol = null;
            arbol = arbolNuevo;

            ((DefaultTreeModel)arbol.getModel()).reload();
        }
        else
            arbolNuevo = new arbolNodos();

问题是,当我检索存储的JTree时,我知道它被很好地检索到了,因为我尝试打印树的所有节点内的属性,它们都是好的,但当我尝试将它放在Swing中时,它没有刷新,并且视图阻塞(即。在加载之前,我不能操作JTree中的任何东西)。我尝试过刷新/更新JTree的多个线程,但都无法修复它。我该怎么做呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2011-11-25 00:25:35

代码语言:javascript
复制
if( modelo != null )
{
    arbolNuevo = new arbolNodos(modelo); // 
    arbol = null;
    arbol = arbolNuevo;
    ((DefaultTreeModel)arbol.getModel()).reload();
}         
else
    arbolNuevo = new arbolNodos(); 

不要一直创建新的JTree对象。如果您想要更改模型,则只需使用:

代码语言:javascript
复制
tree.setModel(...);

另外,为什么要扩展JTree、DefaultTreeModel、DefaultMutableTreeNode?如果出于某种原因,您确实需要扩展这些类,那么请遵循这些类的标准Java命名约定。类以大写字符开头。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8259734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档