103 lines
3.5 KiB
Plaintext
103 lines
3.5 KiB
Plaintext
/* NetRexx */
|
|
options replace format comments java crossref symbols binary
|
|
|
|
import javax.swing.Timer
|
|
|
|
-- .+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
|
|
class RClockSwing public extends JFrame
|
|
-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
|
properties constant
|
|
K_TITLE = String "Clock"
|
|
isTrue = boolean (1 == 1)
|
|
isFalse = \isTrue
|
|
properties inheritable
|
|
content = Container
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method RClockSwing() public
|
|
this(K_TITLE)
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method RClockSwing(title = String) public
|
|
super(title)
|
|
initFrame()
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method initFrame() private
|
|
content = getContentPane()
|
|
content.setLayout(BorderLayout())
|
|
content.add(RClockSwing.Panel(), BorderLayout.CENTER)
|
|
setResizable(isFalse)
|
|
pack()
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method main(args = String[]) public static
|
|
clockFace = JFrame
|
|
clockFace = RClockSwing()
|
|
clockFace.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
|
|
clockFace.setVisible(isTrue)
|
|
return
|
|
|
|
--..+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
|
|
class RClockSwing.Panel shared extends JPanel implements ActionListener
|
|
properties constant
|
|
degrees450 = double Math.PI * 2.5
|
|
degrees006 = double Math.PI / 30.0
|
|
degrees030 = double degrees006 * 5
|
|
size = int 350
|
|
spacing = int 10
|
|
diameter = int size - 2 * spacing
|
|
x1 = int diameter / 2 + spacing
|
|
y1 = int diameter / 2 + spacing
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method Panel() public
|
|
super()
|
|
initPanel()
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method initPanel() public
|
|
setPreferredSize(Dimension(size, size))
|
|
setBackground(Color.WHITE)
|
|
ptimer = Timer(1000, this)
|
|
ptimer.start()
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method paintComponent(gr = Graphics) public
|
|
super.paintComponent(gr)
|
|
g2 = Graphics2D gr
|
|
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
|
|
gr.setColor(Color.black)
|
|
gr.drawOval(spacing, spacing, diameter, diameter)
|
|
cdate = Calendar.getInstance()
|
|
hours = cdate.get(Calendar.HOUR)
|
|
minutes = cdate.get(Calendar.MINUTE)
|
|
seconds = cdate.get(Calendar.SECOND)
|
|
angle = double degrees450 - (degrees006 * seconds)
|
|
drawHand(gr, angle, int (diameter / 2 - 10), Color.red)
|
|
minsecs = double (minutes + seconds / 60.0)
|
|
angle = degrees450 - (degrees006 * minsecs)
|
|
drawHand(gr, angle, int (diameter / 3), Color.black)
|
|
hourmins = double (hours + minsecs / 60.0)
|
|
angle = degrees450 - (degrees030 * hourmins)
|
|
drawHand(gr, angle, int (diameter / 4), Color.black)
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method drawHand(gr = Graphics, angle = double, radius = int, color = Color) public
|
|
x2 = x1 + (int (radius * Math.cos(angle)))
|
|
y2 = y1 + (int (radius * Math.sin(-angle)))
|
|
gr.setColor(color)
|
|
gr.drawLine(x1, y1, x2, y2)
|
|
return
|
|
|
|
-- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
method actionPerformed(evt = ActionEvent) public
|
|
repaint()
|
|
return
|