BorderLayout: вложенная панель CENTER увеличивается, но не меняет размер внешней панели - PullRequest
0 голосов
/ 26 августа 2010

У меня есть основной 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?

1 Ответ

1 голос
/ 26 августа 2010

Проблема в том, что FlowLayout не пересчитывает предпочтительный размер, когда кнопки переносятся в следующую строку.

Вы можете использовать WrapLayout .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...