package LoopExample; import javax.swing.*; // voor JFrame en JButton import java.awt.*; // voor de BorderLayout import java.awt.event.*; // voor knopafhandeling /* * Dit programma is gebaseerd op VerplaatsBal2 van Hoofdstuk 4 van het handboek * Dit programma tekent een bal met een vaste grootte, * bijvoorbeeld 100 pixels. De bal staat bij het begin van het * programma ongeveer in het midden van het scherm. * De bal botst op en neer . * Er zijn twee knoppen (naarLinks en naarRechts genoemd) * waarmee de gebruiker de bal naar links en naar rechts kan * bewegen. */ public class GeanimeerdeBalWindowTimer extends JFrame implements ActionListener { private JButton naarLinks, naarRechts, stopKnop; GeanimeerdeBalPaneelTimer bal; // maak een venster met een paneel en knoppen als inhoud public GeanimeerdeBalWindowTimer() { // new BorderLayout(); // default setSize(700,400); // veel ruimte voor de bal setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Verplaatsbare bal, versie 2"); setLocation(100,100); // niet helemaal linksboven bal = new GeanimeerdeBalPaneelTimer(); add( bal, BorderLayout.CENTER ); naarLinks = new JButton("<"); naarLinks.addActionListener(this); add(naarLinks, BorderLayout.WEST ); naarRechts = new JButton(">"); naarRechts.addActionListener(this); add(naarRechts, BorderLayout.EAST ); stopKnop = new JButton("Stop"); stopKnop.addActionListener(this); add(stopKnop, BorderLayout.SOUTH ); setVisible(true); } // bij een klik de horizontale plaats aanpassen en opnieuw tekenen public void actionPerformed(ActionEvent e) { final int VERPLAATSING = 7; // opschuiving per klik if ( e.getSource() == naarLinks) { bal.setHorPlaats( bal.getHorPlaats() - VERPLAATSING ); } else if ( e.getSource() == naarRechts) // naar rechts { bal.setHorPlaats( bal.getHorPlaats() + VERPLAATSING ); } else { bal.timer.stop(); // stoppen van animatie } } public static void main( String[ ] args) { GeanimeerdeBalWindowTimer window = new GeanimeerdeBalWindowTimer(); window.bal.timer.start(); } }