Java - управление Z порядком JPanels - PullRequest
7 голосов
/ 21 сентября 2010

Короче говоря, мне нужно иметь фоновое изображение в моем java-приложении и, на каком-то событии, создать еще одну графику поверх этого изображения.

Я думал, что буду использовать JPanel, чтобы нарисовать фоновое изображение, добавить его в мой JFrame в начале программы, а затем добавить другие JPanel поверх этого при определенных событиях. Проблема в том, что Swing сначала добавляет JPanels самый высокий индекс Z, так что, какой должен быть мой фон, отображается поверх всего.

Есть ли способ контролировать индекс / порядок Z в JPanels, или я полностью ошибаюсь?

Ответы [ 4 ]

13 голосов
/ 21 сентября 2010

Вы можете использовать setComponentZOrder() для обработки Z-заказа в вашем приложении.


Ресурсы:

2 голосов
/ 25 сентября 2010

JLayeredPane предназначен именно для этой цели.Позволяет контролировать Z-порядок компонентов.

2 голосов
/ 21 сентября 2010

Звучит странно, если добавить несколько JPanels и использовать z-порядок.Я бы предложил вам либо просто добавить ONE JPanel с перезаписанным методом paintComponent (Graphics g), где вы рисуете правильное изображение в соответствии с вашими событиями.

Или использовать CardLayout и добавить JLabels (с разными изображениями),затем, когда ваше событие срабатывает, используйте

CardLayout cl = (CardLayout)getLayout();
cl.show(this, "card3");

, чтобы показать правильный JLabel.

1 голос
/ 22 сентября 2010

Я думал, что буду использовать JPanel для нарисуйте фоновое изображение, добавьте его в моем JFrame начало программы,

Звучит разумно.

, а затем добавьте другие JPanels поверх что при определенных событиях. Эта проблема Swing дает добавленные JPanels первыми самый высокий индекс Z, так что должно быть мой фон показывает вверху все.

Добавление панели на панель аналогично добавлению на панель другого компонента. Дочерний компонент будет нарисован поверх родительской панели. Нет необходимости играть с Z-Order.

Ключ должен установить менеджер раскладки на панели с изображением. Затем каждая панель, добавляемая на панель изображений, должна быть непрозрачной, чтобы фоновое изображение было окрашено.

Может быть, Панель фона может вам помочь. Он автоматически делает любой компонент, добавленный непосредственно на панель, непрозрачным.

...