JSplitPane расщепление 50% точно

В Swing, какой лучший способ сделать JSplitPane разделить две jpanels размером 50% каждая.

Похоже, что если я не установлю предпочтительные размеры на панелях, это всегда делает первую панель практически невидимой (2%), а вторую (98%).

заранее спасибо

4 ответа

Решение

Использование

setResizeWeight(.5d);

[...] Значение 0, по умолчанию, указывает, что правый / нижний компонент получает все дополнительное пространство (левый / верхний компонент действует фиксированным), где в качестве значения 1 указывает, что левый / верхний компонент получает все дополнительные пробел (правый / нижний компонент действует фиксированным). [...]

Вы должны использовать setDividerLocation(double proportionalLocation) определить начальное пространственное распределение JSplitPane, а затем позвоните setResizeWeight(double) с тем же значением, чтобы гарантировать, что размеры панелей изменяются пропорционально.

Также имейте ввиду: звоню setDividerLocation(double) перед JSplitPane Видимо не будет работать правильно, так как расчет пространства основан на Component Текущий размер. Вместо этого вам нужно задействовать неприятный хак, такой как переопределение JPanel метод рисования, который содержит JSplitPane:

private boolean painted;

@Override
public void paint(Graphics g) {
    super.paint(g);

    if (!painted) {
        painted = true;
        splitPane.setDividerLocation(0.25);
    }
}

У меня была похожая проблема, и я решил ее, используя компонентный прослушиватель в родительском контейнере и установив расположение делителя при первом изменении размера. Инициализируйте переменную firstResize в true и добавьте ее в конструктор родительского контейнера:

addComponentListener(new ComponentAdapter(){
    @Override
    public void componentResized(ComponentEvent e) {
        if(firstResize){
            splitPane.setDividerLocation(0.5);
            firstResize = false;
        }
    }
});

Это должно привести к центрированию разделителя при первом задании размера родительского контейнера.

Решения здесь не принимают во внимание случай, когда пользователь перемещает разделитель (то есть переменное расположение разделителя). Полный пример, который учитывает это, доступен здесь:

Как заставить JSplitPane сохранять то же пропорциональное расположение, если пользователь переместил расположение разделителя

Другие вопросы по тегам