Как создать пользовательский компонент Java Swing GUI с формой и градиентом - PullRequest
3 голосов
/ 25 июля 2011

Мне нужно создать пользовательский компонент на моем JFrame, компонент покажет состояние хранилища этого пользователя, хранилище будет в процентах.

Мне нужно создать что-то вроде этого:

image

Я попытался с помощью пользовательского JLabel создать метку, а затем раскрасить эту метку слева направо, но мне не удалось создать метку в форме облака и затем заполнить эту метку в соответствии со значением переменной.

Как мне это сделать и как лучше всего это сделать?

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

Спасибо!

Ответы [ 4 ]

5 голосов
/ 25 июля 2011

Я думаю, вам нужно использовать маску изображения (примеры здесь и здесь ), если вы хотите точно скопировать это облако.

Для процесса потребуется 2 изображения:

  • Контур облака (синие части)
  • Маска изображения представляет собой форму облака, вероятно черного цвета снаружи и белого цвета внутри

Тогда ваш процесс рисования, который вам придется выполнять каждый раз, когда изменяется% памяти:

  1. Создать новое буферизованное изображение
  2. Нарисуйте, затем зеленую заливочную полосу в нужном вам стиле (например, с наклоном, как на этом рисунке)
  3. Скопируйте маску изображения поверх этого
  4. Нарисуйте это новое изображение на экране с маской, примененной как , описанной здесь
  5. Нарисуйте контурное изображение облака на экране

Это займет у вас час или около того, чтобы собрать, поэтому я не собираюсь делать это для вас. Попробуйте, и если вы столкнетесь с проблемами (или не поймете, что я только что описал), то спросите об этом конкретно.

3 голосов
/ 25 июля 2011

Вы можете использовать GlyphVector#getGlyphOutline(), чтобы получить форму символа Юникода, такого как ☁ \ u2601, и заполнить его GradientPaint.

2 голосов
/ 25 июля 2011

Это можно сделать с помощью JLabel и пользовательского класса, созданного на основе Icon.

1 голос
/ 25 июля 2011

разве это не помогает? Пример метки градиента Java

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...