Java JTree和DefaultTreeModel,加载后如何可视化刷新?

Java JTree和DefaultTreeModel,加载后如何可视化刷新?,java,swing,model,jtree,Java,Swing,Model,Jtree,我一直在这里搜索,并找到了这个问题的答案,但似乎不能使他们为我工作。基本上,我有一个GUI,它在JScrollPane中包含一个JTree: private void initComponents() { scroll = new javax.swing.JScrollPane(); nodo padre = new nodo(); modeloArbol modelo = new modeloArbol(padre); arbo

我一直在这里搜索,并找到了这个问题的答案,但似乎不能使他们为我工作。基本上,我有一个GUI,它在JScrollPane中包含一个JTree:

private void initComponents() {

        scroll = new javax.swing.JScrollPane();
        nodo padre = new nodo();
        modeloArbol modelo = new modeloArbol(padre);
        arbol = new arbolNodos(modelo);
我有以下课程:

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(它们实际上检索树的根节点)存储(BotonGuardArbol)和检索(BotonArbol)到一个文件中,并使用相应的actionPerformed侦听器:

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的许多线程,但无法修复它。我该怎么做

多谢各位

if( modelo != null )
{
    arbolNuevo = new arbolNodos(modelo); // 
    arbol = null;
    arbol = arbolNuevo;
    ((DefaultTreeModel)arbol.getModel()).reload();
}         
else
    arbolNuevo = new arbolNodos(); 
不要一直创建新的JTree对象。如果要更改模型,只需使用:

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

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

tree.setModel(...);

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

非常有效!我还将检查类的Java命名约定。。。非常感谢。工作得很有魅力!我还将检查类的Java命名约定。。。非常感谢。请学习java命名约定并遵守它们。请学习java命名约定并遵守它们