Mega Code Archive

 
Categories / Java / Swing JFC
 

Drawing with Swing, using a JSlider

// : c14:SineWave.java // Drawing with Swing, using a JSlider. // <applet code=SineWave width=700 height=400></applet> // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import javax.swing.JApplet; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; class SineDraw extends JPanel {   private static final int SCALEFACTOR = 200;   private int cycles;   private int points;   private double[] sines;   private int[] pts;   public SineDraw() {     setCycles(5);   }   public void setCycles(int newCycles) {     cycles = newCycles;     points = SCALEFACTOR * cycles * 2;     sines = new double[points];     for (int i = 0; i < points; i++) {       double radians = (Math.PI / SCALEFACTOR) * i;       sines[i] = Math.sin(radians);     }     repaint();   }   public void paintComponent(Graphics g) {     super.paintComponent(g);     int maxWidth = getWidth();     double hstep = (double) maxWidth / (double) points;     int maxHeight = getHeight();     pts = new int[points];     for (int i = 0; i < points; i++)       pts[i] = (int) (sines[i] * maxHeight / 2 * .95 + maxHeight / 2);     g.setColor(Color.RED);     for (int i = 1; i < points; i++) {       int x1 = (int) ((i - 1) * hstep);       int x2 = (int) (i * hstep);       int y1 = pts[i - 1];       int y2 = pts[i];       g.drawLine(x1, y1, x2, y2);     }   } } public class SineWave extends JApplet {   private SineDraw sines = new SineDraw();   private JSlider adjustCycles = new JSlider(1, 30, 5);   public void init() {     Container cp = getContentPane();     cp.add(sines);     adjustCycles.addChangeListener(new ChangeListener() {       public void stateChanged(ChangeEvent e) {         sines.setCycles(((JSlider) e.getSource()).getValue());       }     });     cp.add(BorderLayout.SOUTH, adjustCycles);   }   public static void main(String[] args) {     run(new SineWave(), 700, 400);   }   public static void run(JApplet applet, int width, int height) {     JFrame frame = new JFrame();     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.getContentPane().add(applet);     frame.setSize(width, height);     applet.init();     applet.start();     frame.setVisible(true);   } } ///:~