package org.jabref.gui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.util.Collection; import javax.swing.Box; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; /** * The side pane is displayed at the left side of JabRef and shows instances of * SidePaneComponents, for instance the GroupSelector, or the SearchManager. */ public class SidePane extends JPanel { private final Dimension PREFERRED_SIZE = new Dimension(220, 100); private final GridBagLayout gridBagLayout = new GridBagLayout(); private final GridBagConstraints constraint = new GridBagConstraints(); private final JPanel mainPanel = new JPanel(); public SidePane() { // For debugging the border: // setBorder(BorderFactory.createLineBorder(Color.BLUE)); setLayout(new BorderLayout()); mainPanel.setLayout(gridBagLayout); // Initialize constraint constraint.anchor = GridBagConstraints.NORTH; constraint.fill = GridBagConstraints.BOTH; constraint.gridwidth = GridBagConstraints.REMAINDER; constraint.insets = new Insets(1, 1, 1, 1); constraint.gridheight = 1; constraint.weightx = 1; /* * Added Scrollpane to fix: */ JScrollPane sp = new JScrollPane(mainPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); sp.setBorder(null); // To remove the scroll panel just change sp to mainPanel and comment // the JScrollPane declaration super.add(sp); } public void setComponents(Collection<SidePaneComponent> comps) { mainPanel.removeAll(); int totalWeights = 0; for (SidePaneComponent c : comps) { constraint.weighty = c.getRescalingWeight(); totalWeights += c.getRescalingWeight(); gridBagLayout.setConstraints(c, constraint); mainPanel.add(c); } if (totalWeights <= 0) { // Fill vertical space so that components start at top constraint.weighty = 1; Component bx = Box.createVerticalGlue(); gridBagLayout.setConstraints(bx, constraint); mainPanel.add(bx); } revalidate(); repaint(); } @Override public void remove(Component c) { mainPanel.remove(c); } @Override public Dimension getMaximumSize() { return getPreferredSize(); } @Override public Dimension getPreferredSize() { return PREFERRED_SIZE; } }