import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RainGame { public static Raindrops raindrops; public static RainView rainView; private static class RainMouseListener implements MouseListener { public void mouseExited(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseClicked(MouseEvent e) { System.out.println("click: " + e.getX() + "," + e.getY() ); raindrops.setIndicator(); } } private static class RainKeyListener implements KeyListener { public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) { System.out.println(" keypress"); raindrops.handleKey(e); rainView.repaint(); } } private static class RainView extends JPanel { public RainView() { super(); setPreferredSize(new Dimension(Raindrops.XSIZE, Raindrops.YSIZE)); } /* implementation of a method inherited from JPanel */ public void paintComponent(Graphics g) { Graphics2D graphics2D; // object containing 2D capabilities super.paintComponent(g); // ensure proper painting sequence graphics2D = (Graphics2D)g; // access graphics2D capabilities graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); raindrops.drawRain(graphics2D); } } static class RButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { System.out.println("resetting\n"); raindrops.resetDrops(); } } public static void main(String[] args) { JFrame mainFrame; Container contentPane; mainFrame = new JFrame("Some ugly example GUI code"); contentPane = mainFrame.getContentPane(); raindrops = new Raindrops(); rainView = new RainView(); contentPane.setLayout(new BorderLayout(5, 5)); contentPane.add(rainView, BorderLayout.CENTER); JButton resetButton = new JButton("reset"); contentPane.add(resetButton, BorderLayout.NORTH); resetButton.addActionListener(new RButtonListener()); JSlider sliderella = new JSlider(JSlider.HORIZONTAL, 0, 10, 3); contentPane.add(sliderella, BorderLayout.SOUTH); // no listener yet for the slider rainView.addKeyListener(new RainKeyListener()); rainView.addMouseListener(new RainMouseListener()); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setSize(raindrops.XSIZE,raindrops.YSIZE); mainFrame.setVisible(true); rainView.requestFocus(); for (int i = 0; i < 100; i++) { System.out.println("Starting step " + i); raindrops.nextTimeStep(); rainView.repaint(); rainView.requestFocus(); // to regain focus after a button click try { Thread.sleep(500); // milliseconds = 1 second } catch (Exception ex) {} } } }