Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Sergey Diordiy Мастер (1081), на голосовании 4 месяца назад
 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 все работает, если раскомментировать добавление кнопки тоже все работает
Голосование за лучший ответ
Татьяна Просветленный (36377) 5 месяцев назад
Проблема в том, что BoxLayout в некоторых случаях может не правильно рассчитывать размеры компонентов, что не позволяет JTree отображаться полностью. Попробуйте следующие изменения:
Добавьте JScrollPane для JTree, и затем добавьте JScrollPane в JPanel с BoxLayout.
Установите предпочтительный размер для JTree.
 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 также помогает определить его размеры корректно.
Sergey DiordiyМастер (1081) 5 месяцев назад
Спасибо, помогло
Sergey Diordiy, поговорил с ИИ...
Похожие вопросы