JLabel с отдельным цветом текста и значков фона - PullRequest
3 голосов
/ 25 марта 2010

У меня есть простой элемент Jlabel с текстом и значком

alt text

установка фона меняет цвет метки полностью.

Я хочу иметь возможность отображать только цвет фона в текстовом разделе метки, т. Е. Иметь отдельные фоны / передний план для значка и текста. Выбор / отмена выбора метки перевернет цвет позади значка и текста. Возможно ли это сделать, просто расширив JLabel, и если да, то какие методы я должен искать для настройки?

alt text

Моя альтернативная идея - создать панель с двумя отдельными элементами метки, одна со значком, другая с текстом. Это кажется немного грязным, и, прежде чем я начну, мне интересно, есть ли более разумный способ добиться этого с помощью Swing.

Ответы [ 3 ]

1 голос
/ 25 марта 2010

Мне нравится стиль того, что вы делаете, но похоже, что вы переопределяете JToggleButton.

Вот пример кнопки переключения, когда левое выбрано, а правое не выбрано:

альтернативный текст http://downloads.padlocksoftware.net/toggle.png

У него нет яркого фона над текстом, но это решение, которое не требует от вас реализации собственного компонента.

Выравнивание установлено как:

jToggleButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jToggleButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
0 голосов
/ 25 марта 2010

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

Ваша альтернативная идея - намного более простое решение. Там вы можете использовать BorderLayout или MigLayout для достижения своей цели.

0 голосов
/ 25 марта 2010

Я полагаю, значок, который вы используете, имеет прозрачный фон? Если это так, вы можете использовать значок с соответствующим цветом фона. Это должно позволить вам установить setBackground () на всю метку, но видеть ее только в тексте.

...