2011-07-23 4 views
0

Je me demande comment faire le code suivant en remplaçant le composant JTree fonctionnant. Actuellement, je reçois un java.lang.NullPointerExceptionComment remplacer un composant JTree dans Java Swing?

at RandomJTree$1.keyPressed(RandomJTree.java:64) 
at java.awt.Component.processKeyEvent(Component.java:6221) 
at javax.swing.JComponent.processKeyEvent(JComponent.java:2801) 
at java.awt.Component.processEvent(Component.java:6040) 
at java.awt.Container.processEvent(Container.java:2041) 
at java.awt.Component.dispatchEventImpl(Component.java:4630) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848) 
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:704) 
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:969) 
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:841) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:668) 
at java.awt.Component.dispatchEventImpl(Component.java:4502) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Window.dispatchEventImpl(Window.java:2475) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

Comment remplacer un composant JTree en Java Swing?

import java.awt.BorderLayout; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import java.util.Random; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultMutableTreeNode; 


public class RandomJTree extends JFrame { 

    private final JTextField jtf = new JTextField(10); 
    private JTree tree; 
    private Random generator = new Random(); 

    private JTree buildTree(int nnodes) { 
     DefaultMutableTreeNode node = new DefaultMutableTreeNode(0); 
     DefaultMutableTreeNode cnode = node; 
     for (int i = 1; i <= nnodes; i++) { 
      System.out.println(i); 
      DefaultMutableTreeNode newn = new DefaultMutableTreeNode(i); 
      int j=generator.nextInt(2);System.out.println("j="+j); 
      if (j== 0 && i != 1) { 
       DefaultMutableTreeNode parent = (DefaultMutableTreeNode)cnode.getParent(); 
       if (parent != null) { 
        parent.add(newn); 
        cnode = parent; 
       } else { 
        node.add(newn); 
        cnode = newn; 
       } 
      } else { 
       cnode.add(newn); 
       cnode = newn; 
      } 
     } 
     return new JTree(node); 
    } 

    public RandomJTree() { 
     setLayout(new BorderLayout()); 
     add(jtf, BorderLayout.NORTH); 
     tree = buildTree(10); 
     add(tree, BorderLayout.CENTER); 

     jtf.addKeyListener(new KeyAdapter() { 
       public void keyPressed(KeyEvent e) { 
        int key = e.getKeyCode(); 
        if (key == KeyEvent.VK_ENTER) { 
         tree = buildTree(Integer.getInteger(jtf.getText())); 
         tree.revalidate(); 
         tree.repaint(); 
        } 
       } 
      }); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new RandomJTree(); 
    } 
} 
+0

Où obtenez-vous l'exception NullPointerException? (Quelle est la trace complète?) – Jeffrey

+0

@Jeffrey: Exception dans le fil "AWT-EventQueue-0" java.lang.NullPointerException –

+1

Est-ce la trace entière de la pile de l'exception? – Jeffrey

Répondre

2

Au lieu de Integer.getInteger(String) que vous souhaitez utiliser Interger.parseInt(String).

/e1 Utilisez cette page et l'arbre randomize:

invalidate(); 
remove(tree); 
tree = buildTree(Integer.parseInt(jtf.getText())); 
add(tree, BorderLayout.CENTER); 
validate(); 
+0

merci de l'avoir signalé. Mon erreur. Mais plus important encore, après avoir tapé un entier dans le champ de texte, voyez-vous l'arbre se rafraîchir avec un nouvel arbre aléatoire? –

+0

Malheureusement non. – Jeffrey

+0

@Qiang Li a trouvé un moyen de rendre les arbres aléatoires, regardez mon poste – Jeffrey

0

L'erreur que vous recherchez est dans la ligne: arbre = BuildTree (Integer.getInteger (jtf.getText())); Vous auriez dû utiliser Integer.parseInt (String s) En tant que celui qui analyse String dans un Int. getInteger (String s) gère les valeurs des propriétés du système.

Questions connexes