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) { 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 { 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.setLayout(new BorderLayout()); cd.setBorder(new EtchedBorder()); cp.add(cd, BorderLayout.CENTER); JPanel p = new JPanel(); p.setLayout(new FlowLayout()); s.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { cd.setVärde(((JSlider)e.getSource()).getValue()); } }); p.add(s); JButton b = new JButton("Nollställ"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { s.setValue(0); cd.setVärde(0); } }); p.add(b); cp.add(p, BorderLayout.SOUTH); } } // class Grafikfönster public class Grafikdemo4 { public static void main(String[] args) { Grafikfönster g = new Grafikfönster("Grafikdemo4"); g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); g.setSize(300, 300); g.setVisible(true); } // main } // class Grafikdemo4