- Eclipse Plug-in Development:Beginner's Guide(Second Edition)
- Dr Alex Blewitt
- 454字
- 2021-07-14 10:36:26
Time for action – drawing a seconds hand
A clock with no hands and no numbers is just a circle. To change this, a second hand will be drawn using a filled arc.
Since arcs are drawn anticlockwise from 0 (on the right, or 3 o'clock) through 90 degrees (12 o'clock), then 180 degrees (9 o'clock), then 270 degrees (6 o'clock), and finally back to 360 degrees (3 o'clock), it is possible to calculate the arc's position for the second hand using the expression (15 – seconds) * 6 % 360.
- Go to the
drawClock
method of theClockView
class. - Add a variable called
seconds
that is initialized toLocalTime.now().getSecond()
. - Get the
SWT.COLOR_BLUE
via the display, and store it in a local variable,blue
. - Set the background color of the graphics context to
blue
. - Draw an arc using the formula mentioned earlier to draw the second hand.
- The code should look like this:
public void paintControl(PaintEvent e) { e.gc.drawArc(e.x, e.y, e.width-1, e.height-1, 0, 360); int seconds = LocalTime.now().getSecond(); int arc = (15 - seconds) * 6 % 360; Color blue = e.display.getSystemColor(SWT.COLOR_BLUE); e.gc.setBackground(blue); e.gc.fillArc(e.x, e.y, e.width-1, e.height-1, arc-1, 2); }
Tip
Make sure that
org.eclipse.swt.graphics.Color
is used rather than the same-named classes fromjava.awt
. - Start Eclipse and show the Clock View. The second hand will be shown once but won't change.
- Resize the view. Then the second hand will be drawn in the new location:
What just happened?
The code calculates the position on the arc at which the second hand will need to be drawn. Since the arc degrees go anticlockwise, the seconds have to be negative. The offset of 15 represents the fact that an arc of 0 is at the 3 o'clock position, which is 15 seconds. This is then multiplied by 6 (60 seconds = 360 degrees) and finally the result is calculated modulus 360, to ensure that it's up to 360 degrees (the value can be negative; the arc calculation works in this way as well).
Although drawArc
colors in the foreground color, the fillArc
colors in the background color. The GC maintains two colors; a foreground color and a background color. Normally an SWT Color
object needs to have a dispose
after use, but to simplify this example, the Display
class's getSystemColor
method is used, whose result does not need to be disposed.
Finally, the arc is drawn 2 degrees wide. To center it, the arc starts from pos-1
, so it is drawn from pos-1
to pos+1
.
When the view is resized, a redraw is issued on the canvas, and so the second hand is drawn in the correct position. However, to be useful as a clock, this should be done automatically do this while the view is visible.
- 數據庫程序員面試筆試真題與解析
- JavaScript修煉之道
- PHP程序設計(慕課版)
- 數據結構(Python語言描述)(第2版)
- Windows Forensics Cookbook
- C語言實驗指導及習題解析
- Python編程實戰
- RSpec Essentials
- Learning Laravel's Eloquent
- Python:Deeper Insights into Machine Learning
- Visual Basic程序設計(第三版)
- FFmpeg開發實戰:從零基礎到短視頻上線
- IoT Projects with Bluetooth Low Energy
- Flask Web開發:基于Python的Web應用開發實戰(第2版)
- Practical Predictive Analytics