вместо листа
mainPanel.add(list, BorderLayout.WEST);
нужно вставлять скролпэйн с листом
mainPanel.add(pane, BorderLayout.WEST);
В вашем случае при изменении размеров окна будет работать самый верхний скролпейн. pack рассчитает размеры таким образом чтобы все компоненты влезли в область видимости и не включили прокрутку.
frame.add(new JScrollPane(mainPanel)); //от скролла лучше избавиться
frame.pack(); //а паком нужно уметь пользоваться, для многих компонентов нужно указывать предпочтительный размер иначе pack может натворить дел.Я не пользуюсь им вовсе.
Лучше убрать этот скроллпейн, и задать предпочтительные размеры компонентов.
Например если добавить инициализацию предпочтительных размеров скролпейна с листом.
pane.setPreferredSize(new Dimension(50,10)); //50 ширина, 10 проигнорируется лэйоутом в данном случае.
то все должно заработать как вам нужно.
А вообще переходите на JavaFX, там все проще.