2011-11-24 6 views
0

私はここで検索してこの問題の答えを見つけましたが、私にはうまくいかないようです。 Basicly私はJScrollPaneの内部JTreeのが含まれているGUIを持っています。JTree with DefaultTreeModel、ロード後に視覚的にリフレッシュするには?

private void initComponents() { 

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

私は次のクラスがあります。私も(botonGuardarArbol)保存2つのボタンを持っていると(botonCargarArbol)を取得

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{ 

を使用してJTreeのXMLEncoder対応の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、私はそれがツリーのすべてのノード内に属性を印刷しようとしているのでうまく取得されていることを知っていますが、それらはOKですが、Swingに入れようとするとリフレッシュされず、私は読み込みを行う前に持っていたJTreeで何も操作できません)。私はリフレッシュ/更新JTreeの多数のスレッドを試しましたが、修正できませんでした。これどうやってするの?

+0

Java命名規則を学び、それらに固執してください。 – kleopatra

答えて

4
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命名規則に従ってください。クラスは大文字で始まります。

+0

魅力的に働いた!また、クラスのJava命名規則をチェックします...ありがとう! – user1064285

関連する問題