Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Java.swing.BoxLayout не отображает JTree полностью

12345678910111213141516171819202122232425
 public MainWindow(){ 
        Container c = getContentPane(); 
        setLayout(new BorderLayout()); 
        JPanel panel = new JPanel(); 
        BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS); 
        panel.setLayout(layout); 
        DefaultMutableTreeNode root = new DefaultMutableTreeNode(new CustomNode("test", null, new ImageIcon( 
                Objects.requireNonNull(MainWindow.class.getClassLoader().getResource("bomb.png")) 
        ))); 
        root.add(new DefaultMutableTreeNode("kjsdfbjkalsdbf")); 
        JTree tree = new JTree(root); 
//        tree.setAlignmentX(Component.RIGHT_ALIGNMENT); 
        tree.setCellRenderer(new CustomNodeCellRenderer()); 
 
        panel.add(tree); 
//        panel.add(new JButton("test")); // Добавление кнопки 
        tree.setBorder(BorderFactory.createLineBorder(Color.BLUE)); 
        c.add(panel); 
 
        setPreferredSize(new Dimension(480, 360)); 
//        setExtendedState(JFrame.MAXIMIZED_BOTH); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        pack(); 
        setVisible(true); 
    } 

JTree не отображается полностью. Если не добавлять BoxLayout все работает, если раскомментировать добавление кнопки тоже все работает

По дате
По рейтингу
Аватар пользователя
Просветленный

Проблема в том, что BoxLayout в некоторых случаях может не правильно рассчитывать размеры компонентов, что не позволяет JTree отображаться полностью. Попробуйте следующие изменения:
Добавьте JScrollPane для JTree, и затем добавьте JScrollPane в JPanel с BoxLayout.
Установите предпочтительный размер для JTree.

123456789101112131415161718192021222324252627
 public MainWindow() { 
    Container c = getContentPane(); 
    setLayout(new BorderLayout()); 
    JPanel panel = new JPanel(); 
    BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS); 
    panel.setLayout(layout); 
 
    DefaultMutableTreeNode root = new DefaultMutableTreeNode(new CustomNode("test", null, new ImageIcon( 
            Objects.requireNonNull(MainWindow.class.getClassLoader().getResource("bomb.png")) 
    ))); 
    root.add(new DefaultMutableTreeNode("kjsdfbjkalsdbf")); 
    JTree tree = new JTree(root); 
    tree.setCellRenderer(new CustomNodeCellRenderer()); 
 
    JScrollPane scrollPane = new JScrollPane(tree); 
    panel.add(scrollPane); 
 
    tree.setBorder(BorderFactory.createLineBorder(Color.BLUE)); 
    tree.setPreferredSize(new Dimension(200, 360)); // Установите предпочтительный размер для JTree 
 
    c.add(panel); 
 
    setPreferredSize(new Dimension(480, 360)); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    pack(); 
    setVisible(true); 
} 

Добавление JScrollPane позволяет JTree корректно отображаться внутри BoxLayout. Установка предпочтительного размера для JTree также помогает определить его размеры корректно.