Расщепление списка, в порядке 50% точно

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

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

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

4 ответов


использовать

setResizeWeight(.5d);

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


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

кроме того, имейте в виду: вызов setDividerLocation(double) до JSplitPane видимого не будет правильно работать, поскольку расчет пространства основан на Componentтекущий размер. Вместо этого вам нужно задействовать неприятный Хак, такой как переопределение JPanel'ы метод paint, содержащий 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, чтобы сохранить то же пропорциональное местоположение, если пользователь переместил местоположение делителя