import java.awt.*; import javax.swing.*; import java.awt.event.*; class Clock extends JPanel implements ActionListener { private JButton tickButton, resetButton; private JLabel hourLabel, minuteLabel; private int minutes = 0; public Clock(){ JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); tickButton = new JButton("Tick"); resetButton = new JButton("Reset"); hourLabel = new JLabel("12:"); minuteLabel = new JLabel("00"); panel.add(tickButton); panel.add(resetButton); panel.add(hourLabel); panel.add(minuteLabel); setLayout(new BorderLayout()); add("South", panel); tickButton.addActionListener(this); resetButton.addActionListener(this); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawOval(0, 0, 100, 100); double hourAngle = 2 * Math.PI * (minutes - 3 * 60)/ (12 * 60); double minuteAngle = 2 * Math.PI * (minutes - 15)/ 60; g.drawLine(50, 50,50 + (int)(30 * Math.cos(hourAngle)), 50 + (int)(30 * Math.sin(hourAngle))); g.drawLine(50, 50,50 + (int)(45 * Math.cos(minuteAngle)), 50 + (int)(45 * Math.sin(minuteAngle))); } public void reset() { minutes = 0; repaint(); } public void tick() { minutes++; repaint(); } public int getMinutes(){ return minutes; } public void actionPerformed(java.awt.event.ActionEvent actionEvent) { if(actionEvent.getSource() == tickButton) tick(); else reset(); setLabels(); } public void setLabels(){ int hours = minutes/60; int min = minutes - hours*60; if(hours == 0 ) //si hours es 0 añadir 12 de modo q la etiqueta muestre las 12 en punto. hourLabel.setText(Integer.toString(hours+12 )+ ":"); else hourLabel.setText(Integer.toString(hours)); if(min<10) //los minutos deberían tener dos dígitos minuteLabel.setText("0" + Integer.toString(min)); else minuteLabel.setText(Integer.toString(min)); } }