3

I have to create a custom component on my JFrame, the Component will show the storage status of that user, the storage will be in percentage.

I need to create something like this:

Image

I tried a custom JLabel to create a label and then coloring that label from left to right, but I was unable to create a cloud shape Label and then filling that label according to a variable value.

How should I do this and what is the best way to do it?

One time I thought I should use series of images to show the status of user storage.

Thanks!

Charles Goodwin
  • 6,402
  • 3
  • 34
  • 63
Asghar
  • 2,336
  • 8
  • 46
  • 79
  • your StorageStatus is static (painted if action occured) or dynamic (periodically based on some Timer) – mKorbel Jul 25 '11 at 13:43

4 Answers4

5

I think you're going to need to use an image mask (examples here and here) if you are to replicate that cloud exactly.

The process will require 2 images:

  • The cloud outline (the blue parts)
  • An image mask is the shape of the cloud, probably black outside and white inside

Then your drawing process, which you'll have to do each time the % storage changes will be:

  1. Create a new buffered image
  2. Draw then green fill bar in the style you want (e.g. slanted as in this image)
  3. Copy the image mask over this
  4. Draw this new image to the screen, with the mask applied as described here
  5. Draw the cloud outline image to screen

That's going to take an hour or so for you to put together, so I'm not going to do it for you. Have a go, and if you run in to problems (or don't understand anything I just described) then ask about that specifically.

Community
  • 1
  • 1
Charles Goodwin
  • 6,402
  • 3
  • 34
  • 63
3

You can use GlyphVector#getGlyphOutline() to get the shape of a Unicode character like ☁ \u2601 and fill it with a GradientPaint.

Catalina Island
  • 7,027
  • 2
  • 23
  • 42
2

You can do that with a JLabel and a custom-implemented class derived from Icon.

Joey
  • 344,408
  • 85
  • 689
  • 683
  • can you please, post here a code snippet, or some elaboration of your answer, Thanks – Asghar Jul 25 '11 at 13:30
  • I imagine you are familiar with how to display an Icon in a JLabel. Subclassing an icon, giving it a percentage attribute and drawing it yourself shouldn't be too hard, I guess. – Joey Jul 25 '11 at 13:53
1

doesn't this help? Java gradient label example

And if you understand (or can translate from) portuguese, there's also this discussion with a solution at the end

woliveirajr
  • 9,433
  • 1
  • 39
  • 49