import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; class Cirkeldiagram extends JPanel { private int värde; private int max; public Cirkeldiagram(int värde, int max) { if (max <= 0) throw new IllegalArgumentException("max = " + max + ", ska vara > 0"); if (värde < 0 || värde > max) throw new IllegalArgumentException("värde = " + värde + ", ska vara 0.." + max); this.värde = värde; this.max = max; setBackground(Color.white); } public Cirkeldiagram(int värde) { this(värde, 100); } public Cirkeldiagram() { this(0, 100); } public void setVärde(int värde) { if (värde < 0 || värde > max) throw new IllegalArgumentException("värde = " + värde + ", ska vara 0.." + max); this.värde = värde; repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.blue); Insets i = getInsets(); int bredd = getWidth() - i.left - i.right; int höjd = getHeight() - i.top - i.bottom; int diameter = Math.min(bredd, höjd); int x = i.left + (bredd - diameter) / 2; int y = i.top + (höjd - diameter) / 2; g.drawOval(x, y, diameter, diameter); double andel = (double)värde / max; int vinkelandel = (int)(andel * 360 + 0.5); g.fillArc(x, y, diameter, diameter, 90, -vinkelandel); } } // class Cirkeldiagram class Grafikfönster extends JFrame { private Cirkeldiagram cd = new Cirkeldiagram(0, 100); JSlider s = new JSlider(0, 100, 0); public Grafikfönster(String titel) { super(titel); Container cp = getContentPane(); cp.add(cd); } public Cirkeldiagram cirkeldiagram() { return cd; } } // class Grafikfönster class Animeringstråd extends Thread { Cirkeldiagram cirkeldiagram; int värde = 0; public Animeringstråd(Cirkeldiagram cd) { this.cirkeldiagram = cd; start(); } public void run() { while (true) { ++värde; if (värde == 100) värde = 0; // cirkeldiagram.setVärde(värde); SwingUtilities.invokeLater(new Runnable() { public void run() { cirkeldiagram.setVärde(värde); } }); try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println("Oj! Sömnen avbruten!"); } } } } // class Animeringstråd public class Grafikdemo6 { public static void main(String[] args) { Grafikfönster g = new Grafikfönster("Grafikdemo6"); g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); g.setSize(300, 300); g.setVisible(true); Animeringstråd t = new Animeringstråd(g.cirkeldiagram()); } // main } // class Grafikdemo6