У меня есть 3 JPanels (давайте назовем каждый из них "BLOCK") в другом JPanel (назовем его "CENTER_DECORS") внутри JScollPane, который находится на одной из вкладок JTabbedPane.
Сейчас: когда я динамическиизменить высоту любого из этих BLOCK-ов («сложить» их, установив их высоту от 150 до 20). Я хочу, чтобы другие BLOCK-ы соответствующим образом обновляли свое вертикальное положение, чтобы они по-прежнему накладывались друг на друга, но степерь у меня есть «дыра» между БЛОКОМ с измененной (пониженной) высотой и следующей.
Я использую BoxLayout для CENTER_DECORS JPanel:
CENTER_DECORS.setLayout(new BoxLayout(CENTER_DECORS, BoxLayout.Y_AXIS));
После того, как я изменил высотуБЛОК ...
BLOCK.setSize(BLOCK.getWidth(), 20);
... Я сразу звоню этот код:
CENTER_DECORS.repaint();
CENTER_DECORS.validate();
CENTER_DECORS.revalidate();
Как ни странно, ничего не происходит вообще, даже высота не меняется, но когда я ухожупросто:
CENTER_DECORS.repaint();
... тогда, по крайней мере, изменит высоту, но не будет суммирования друг с другом.
ОБНОВЛЕНИЕ: решение должно иметьвозможность хранения сложенного / развернутого состояния с каждой строкойпоэтому, когда программа запускается, она может перейти в соответствующее состояние (свернуто / развернуто).
Кто-нибудь знает решение, чтобы эти BLOCK-ы по-прежнему придерживались друг друга вертикально, когда их высота изменяется?
РЕДАКТИРОВАТЬ: только после того, как я полностью проверил решение @MadProgrammer, я понял, что дублированный ответ не является правильным, поскольку он позволяет только развернуть / открыть 1 «блок» одновременно, и мне это нужноможет быть расширено независимо от того, сколько «блоков» + его код начинается со всего сложенного / свернутого, и мне нужно, чтобы он был в их нормальном состоянии, то есть - в большинстве случаев - в расширенном состоянии + мое решение не требует специального слушателябыть использованным (кроме MouseListener для состояний кнопок, что, конечно, нормально), таким образом, меньше кода.
Итак, после того, как весь день возился, я наконец-то создал свою собственную версию, вдохновленную подходом @ MadProgrammer - мой код теперь ведет себя точноЯ хотел (потому что я искал это решение, потому что мое приложение может иметь как десяткиразличные «блоки» в JPanel, с которыми довольно сложно справиться, поскольку они занимают слишком много места, которое может быть в большинстве случаев не нужно, поэтому было бы неплохо иметь возможность сложить их), поэтому приведенный ниже код на самом делеправильное решение, пожалуйста, удалите эту «дублирующую» вещь, поскольку она более не точна (см. мой отдельный ответ ниже).