Да, это намеренно (часть спецификации). Если объект имеет собственное свойство (.property
в вашем примере), это свойство будет использоваться, а не унаследовано. Если это свойство существует, но является свойством accessor без getter, тогда возвращается undefined
.
Обратите внимание, что это поведение не изменилось с ES5.
Используйте
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);
}
}
Решения здесь не принимают во внимание случай, когда пользователь перемещает разделитель (то есть переменное расположение разделителя). Полный пример, который учитывает это, доступен здесь: