import java.awt.*; import javax.swing.*; 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) { System.out.println("Cirkeldiagram.paintComponent..."); super.paintComponent(g); g.setColor(Color.blue); Insets i = getInsets(); System.out.println(" i = " + i); 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 { public Grafikfönster(String titel) { super(titel); Container cp = getContentPane(); cp.setLayout(new GridLayout(1, 3)); Cirkeldiagram cd1 = new Cirkeldiagram(10, 100); Cirkeldiagram cd2 = new Cirkeldiagram(75, 100); Cirkeldiagram cd3 = new Cirkeldiagram(55, 100); cd2.setBorder(new EtchedBorder()); cd3.setBorder(new LineBorder(Color.green, 15)); cp.add(cd1); cp.add(cd2); cp.add(cd3); } } // class Grafikfönster public class Grafikdemo2 { public static void main(String[] args) { Grafikfönster g = new Grafikfönster("Grafikdemo2"); g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); g.setSize(800, 400); g.setVisible(true); } // main } // class Grafikdemo2