2014-10-28 4 views
0

У меня две панели в моем JInternalframe. Я хочу добавить Jtree на второй Jpanel с именем topPanel. Но я не могу добавить Jtree в topPanel. Пожалуйста, помогите мне. Это мой кусок кода:Невозможно добавить JTree в JPanel JInternalFrame

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Deck"); 

DefaultMutableTreeNode itemClubs = new DefaultMutableTreeNode("Clubs"); 
addAllCard(itemClubs); 
root.add(itemClubs); 

DefaultMutableTreeNode itemDiamonds = new DefaultMutableTreeNode("Diamonds"); 
addAllCard(itemDiamonds); 
root.add(itemDiamonds); 

DefaultMutableTreeNode itemSpades = new DefaultMutableTreeNode("Spades"); 
addAllCard(itemSpades); 
root.add(itemSpades); 

DefaultMutableTreeNode itemHearts = new DefaultMutableTreeNode("Hearts"); 
addAllCard(itemHearts); 
root.add(itemHearts); 
DefaultTreeModel treeModel = new DefaultTreeModel(root); 
tree = new JTree(treeModel); 
scrollPane = new JScrollPane(tree); 
// scrollPane.setViewportView(tree); 

scrollPane.getViewport().add(tree); 

topPanel.add(scrollPane, BorderLayout.CENTER); 

topPanel.setVisible(true); 

tree.setVisible(true); 
+0

Не добавлять компонент в 'JViewport', использовать что-то более, как' scrollPane.setViewportView (дерево) ', но так как вы уже установил его через конструктор, нет необходимости делать это – MadProgrammer

+0

Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

+0

Попробуйте также «tree.expandPath (new TreePath (root))», поскольку корень обычно сбрасывается по умолчанию ... и не отображается: P – MadProgrammer

ответ

1

В основном, работает для меня, должно быть что-то вы не показывая нам.

Рассмотрите возможность предоставления runnable example, который демонстрирует вашу проблему. Это приведет к уменьшению путаницы и лучше ответов

TreeExample

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTree; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.DefaultTreeModel; 

public class TreeTest { 

    public static void main(String[] args) { 
     new TreeTest(); 
    } 

    public TreeTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JDesktopPane desktopPane = new JDesktopPane(); 
       JInternalFrame inFrame = new JInternalFrame("Tree", true, true, true, true); 
       inFrame.add(new TestPane()); 
       inFrame.pack(); 
       inFrame.setVisible(true); 
       desktopPane.add(inFrame); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(desktopPane); 
       frame.setSize(200, 200); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new BorderLayout()); 

      DefaultMutableTreeNode root = new DefaultMutableTreeNode("Deck"); 
      DefaultMutableTreeNode itemClubs = new DefaultMutableTreeNode("Clubs"); 
      root.add(itemClubs); 
      DefaultMutableTreeNode itemDiamonds = new DefaultMutableTreeNode("Diamonds"); 
      root.add(itemDiamonds); 
      DefaultMutableTreeNode itemSpades = new DefaultMutableTreeNode("Spades"); 
      root.add(itemSpades); 
      DefaultMutableTreeNode itemHearts = new DefaultMutableTreeNode("Hearts"); 
      root.add(itemHearts); 
      DefaultTreeModel treeModel = new DefaultTreeModel(root); 
      JTree tree = new JTree(treeModel); 
//   tree.setRootVisible(true); 
//   tree.setShowsRootHandles(true); 

      JPanel topPanel = new JPanel(new BorderLayout()); 
      topPanel.add(new JScrollPane(tree)); 
      add(topPanel); 
     } 

    } 

} 
+0

Здесь, где находится панель topPanel. – ddk

+0

Если вы действительно хотите, создайте новый 'JPanel'' TestPane' и добавьте его в 'TestPane' ... тот же результат – MadProgrammer

+0

Позвольте мне показать вам мой дизайн – ddk

Смежные вопросы