


Программирование
+2Java.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 также помогает определить его размеры корректно.