Я попытался добавить возможность просмотра файлов в свою программу. Я хотел использовать код отсюда: 1 (ответ Гилберта), но для меня было важно иметь JTree в определенном положении и размере. К сожалению, когда я это сделал, JTree не «отвечает», когда я нажимаю на него.Невозможно использовать JTree без LayoutManager
Вот код:
public class Frame extends JFrame implements Runnable {
private DefaultMutableTreeNode root;
private DefaultTreeModel treeModel;
private JTree tree;
public File fileRoot;
public Frame(){
super("FileBrowser");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(480, 320);
setLocation(50,50);
getContentPane().setLayout(null);
fileRoot = new File("C:/");
root = new DefaultMutableTreeNode(new FileNode(fileRoot));
treeModel = new DefaultTreeModel(root);
tree = new JTree(treeModel);
tree.setBounds(10, 39, 155, 177);
getContentPane().add(tree);
tree.setShowsRootHandles(true);
}
@Override
public void run() {
CreateChildNodes ccn = new CreateChildNodes(fileRoot, root);
new Thread(ccn).start();
}
}
Основной класс:
public class main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Frame());
}
}
Когда я комментирую
getContentPane().setLayout(null);
и пусть JTree заполнить весь кадр, он работает, как он должен
Спасибо, это работает! Я знаю, что, как правило, гораздо лучше использовать менеджеры макетов, но в моем случае я хочу отображать свою программу на определенном экране, а макет - не ключевая функция, поэтому я выбрал более простой способ. – Ch0mik18
Чтобы подробнее узнать о том, что в этом ответе ** больше всего ** стоит обратить внимание: Java GUI должны работать с разными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –
@ Ch0mik18 в этом случае было бы неплохо, если бы вы приняли мой ответ как правильный. –