JSplitPane createBrowseSection() { spinner = new LoadingAnimationHelper(); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); splitPane.setContinuousLayout(true); fs = frame.gui.ssvr.getIndexNodeCommunicator().getFileSystem(); browseTree = new JTree(fs); // Allows the filesystem to keep refreshing directories we have visible: fs.setPathRequired( new PathRequired() { @Override public boolean required(TreePath path) { return browseTree.isExpanded(path); } }); fs.addTreeModelListener(spinner); browseTree.setCellRenderer(browseTreeRenderer = new BrowseTreeCellRenderer()); browseTree.addTreeSelectionListener(this); browseTree.addMouseMotionListener(this); browseTree.addMouseListener(this); browseTree.addTreeExpansionListener(this); browseTree.setRootVisible(false); browseTree.expandPath(fs.getBrowseRoot().getPath()); JScrollPane treeView = new JScrollPane(browseTree); treeView.setMinimumSize(new Dimension(100, 100)); splitPane.setLeftComponent(treeView); filesTable = new FancierTable(fs, frame.gui.conf, CK.FILES_TABLE_COLWIDTHS); filesTable.addMouseListener(this); filesTable.getSelectionModel().addListSelectionListener(this); filesTable.getColumn(fs.getColumnName(0)).setCellRenderer(new FilesTableNameRenderer()); JScrollPane filesView = new JScrollPane(filesTable); splitPane.setRightComponent(filesView); splitPane.setDividerLocation(frame.gui.conf.getInt(CK.FILES_DIVIDER_LOCATION)); splitPane.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, this); return splitPane; }