Перекрытие компонентов при использовании ComponentResizer - PullRequest
0 голосов
/ 23 мая 2019

Я хочу сделать jTable расширяемым при перемещении / наложении при перетаскивании его с помощью класса ComponentResizer.Я использую ComponentResizer класс от Роба Камика.

В настоящее время, как показано ниже, после перетаскивания таблицы:

enter image description here

Я попытался изменить макет на ноль, но результат все тот же.В моем коде я просто добавил вызов класса ComponentResizer:

ComponentResizer cr = new ComponentResizer();
cr.setSnapSize(new Dimension(10, 10));
cr.registerComponent(jScrollPane2);

Я ожидаю, что таблица перетаскивания будет плавать и перекрывать компоненты под ней.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Swing предназначен для рисования компонентов в 2D-пространстве, а не в 3D-пространстве.

Таким образом, когда компоненты добавляются на одну и ту же панель, Swing будет рисовать компоненты в обратном порядке, добавляя компонент на панель. В вашем случае это выглядит так, как будто вы добавляете компоненты на панель перед добавлением панели прокрутки на панель.

Чтобы вы могли:

  1. обратный порядок добавления компонентов на панель
  2. используйте метод setComponentZOrder(...) на полосе прокрутки, чтобы установить его значение на 0, чтобы оно отображалось в последнюю очередь.

Однако это все равно вызовет проблему, потому что если вы наведите курсор мыши на кнопку, кнопка появится из-за изменения ее границы. Это потому, что Swing предполагает 2D макеты, а не 3D. Если вы хотите убедиться, что таблица всегда закрашена над кнопкой, вам нужно переопределить метод isOptimizedDrawingEnable() панели. См. Схема перекрытия для получения дополнительной информации о рисовании ZOrder.

0 голосов
/ 27 мая 2019

Я решил проблему, поместив все компоненты в одну многоуровневую панель и используя Border Layout.

...