Вывести компонент на JPanel на передний план (Java) - PullRequest
10 голосов
/ 10 августа 2011

В VB вы можете использовать zOrder. В .Net это .SetChildIndex.

Прежде чем вы спросите, нет, я не использую менеджер раскладки в этом случае. Если у вас есть два компонента друг над другом, как изменить порядок после того, как они уже были отображены?

У меня есть кнопка, которая слегка перекрывает другой компонент (метку) из-за недостатка места. Я добавил JLabel в форму перед кнопкой, и когда форма загружается, она выглядит хорошо. Однако, когда пользователь нажимает кнопку, JLabel переходит назад, и часть ее исчезает. Есть ли способ сохранить это на переднем плане? Я попытался поместить label.grabFocus() в ActionListener кнопки, но это не сработало.

Ответы [ 5 ]

7 голосов
/ 10 августа 2011

Когда компоненты перекрываются на панели, вам нужно сообщить панели, чтобы она могла убедиться, что она перерисовывает компоненты в их правильном ZOrder:

Вы делаете это, переопределяя метод isOptimizedDrawingEnabled() JPanel длявозврат false.

7 голосов
/ 10 августа 2011

вы также можете использовать LayeredPane вашего JFrame.С JFrame.getLayeredPane () вы получаете ссылку на используемую панель.

метод add LayeredPane имеет до 2 дополнительных параметров типа int.первый указывает слой добавляемого вами компонента, а второй определяет порядок внутри этого слоя.

Больше информации вы можете найти в http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html#layeredpane

3 голосов
/ 10 августа 2011

Во-первых, это плохой дизайн.Хотя label.repaint() работает, это не так, как вы должны это делать.Вы не указываете явно, как эти компоненты накладываются друг на друга.Для этого лучшим подходом будут Layered Panes.Java-аналогом для zOrder является Layered Pane.Эта ссылка должна помочь вам: http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

просто скажите мне, если у вас есть какие-либо проблемы.

1 голос
/ 10 августа 2011

Не совсем очевидно, что перекрывающиеся компоненты ведут себя правильно. Наиболее поддерживаемый способ - использовать OverlayLayout на вашей панели.

1 голос
/ 10 августа 2011

Я не уверен, но перекрасит ли работа? немного взломать, если это так, может быть, кто-то может найти лучший способ ...

...