Перекрывающиеся вкладки с JTabbedPane - PullRequest
2 голосов
/ 10 августа 2010

Используя JTabbedPane, мы хотим реализовать дизайн, который требует перекрытия вкладок (показано на рисунке, которое можно найти здесь: http://imm.io/YAZ).

Не совсем ракетостроение, но я не могу показатьсячтобы найти решение (даже после интенсивного поиска в Google).

Возможно ли это с помощью JTabbedPane (возможно, через PLAF) или нам нужно написать собственный компонент?

Спасибо
Томас

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Решено это путем переопределения paintTab в пользовательской реализации пользовательского интерфейса и закрашивания части предыдущей вкладки поверх следующей. Это стало возможным, поскольку paintTab позволяет рисовать по всей области вкладки, а не только в границах вкладки, в которой он рисовал. Пример, если у нас есть вкладки A, B и C:

Tab A рисует свою левую границу и центральную заливку. Вкладка B закрашивает свою левую границу, заливку по центру, а затем правую границу вкладки A. Вкладка C закрашивает свою левую границу, центральную заливку, правую границу вкладки B, а затем собственную правую границу (поскольку это последняя вкладка на панели).

Затем обработайте выбранные вкладки немного по-другому.

Приведенное выше решение было несложно реализовать и работает очень хорошо.

0 голосов
/ 10 августа 2010

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

Вы можете сделать так, чтобы это перекрывалось, вызывая метод paintComponent на выбранной вкладке в последний раз, то есть он будет ближе к передней части представления.

Что касается перекрывающегося класса вкладок, вы можете использовать практически любой подкласс JComponent для своего кода. Вы даже можете создать тему с прозрачными PNG в качестве фона и вызывать public void setOpaque (boolean isOpaque) на самой вкладке.

...