У меня есть основной JPanel, который реализует Scrollable и использует BorderLayout. Он содержит одну СЕРИЮ JEditorPane только для чтения, одну CENTER JPanel с FlowLayout, посредством которой JButtons добавляются динамически, и одну SOUTH JLabel, все добавляются в этом порядке. Когда многие JButton добавляются в CENTER JPanel, кнопки переносятся на следующие строки: проблема в том, что вертикальное пространство, превышающее одну строку, занятое CENTER JPanel, просто перекрывается с ЮЖНОЙ JLabel и не вызывает динамического роста всей JPanel или показать вертикальную полосу прокрутки. С другой стороны, когда в NORTH JEditorPane добавляется достаточное количество текста для переноса на следующие строки, он ведет себя так, как я ожидал, и нажимаю CENTER JPanel вниз и показываю вертикальные полосы прокрутки.
Вот основная реализация JPanel Scrollable:
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return Math.max(visibleRect.height * 9 / 10, 1);
}
public boolean getScrollableTracksViewportHeight() {
if (getParent() instanceof JViewport) {
JViewport viewport = (JViewport) getParent();
return getPreferredSize().height < viewport.getHeight();
}
return false;
}
public boolean getScrollableTracksViewportWidth() {
return true;
}
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return Math.max(visibleRect.height / 10, 1);
}
Что я делаю не так? Как я могу заставить JANEL ЦЕНТРА толкать ЮЖНУЮ метку вниз, чтобы вырастить весь основной JPanel?