SHARE
TWEET

Untitled

Oslapas Nov 19th, 2019 93 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import javax.swing.Timer;
  2. import java.util.ArrayList;
  3. import java.awt.*;
  4. import javax.swing.*;
  5. import java.awt.event.*;
  6.  
  7. public class BounceBallApp extends JFrame {
  8.  
  9.     public BounceBallApp() {
  10.         add(new BallControl());
  11.     }
  12.  
  13.     public static void main(String[] args) {
  14.         JFrame frame = new BounceBallApp();
  15.         frame.setTitle("MultipleBallApp");
  16.         frame.setSize(300, 200);
  17.         frame.setLocationRelativeTo(null);
  18.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19.         frame.setVisible(true);
  20.     }
  21.  
  22.     class BallControl extends JPanel {
  23.  
  24.         private BallPanel ballPanel = new BallPanel();
  25.         private JButton jbtSuspend = new JButton("Suspend");
  26.         private JButton jbtResume = new JButton("Resume");
  27.         private JButton jbtAdd = new JButton("Add");
  28.         private JButton jbtSubtract = new JButton("Remove");
  29.         private JScrollBar jsbDelay = new JScrollBar();
  30.  
  31.         public BallControl() {
  32.             // Group buttons in a panel
  33.             JPanel panel = new JPanel();
  34.             panel.add(jbtSuspend);
  35.             panel.add(jbtResume);
  36.             panel.add(jbtAdd);
  37.             panel.add(jbtSubtract);
  38.  
  39.             // Add ball and buttons to the panel
  40.             ballPanel.setBorder(
  41.                     new javax.swing.border.LineBorder(Color.red));
  42.             jsbDelay.setOrientation(JScrollBar.HORIZONTAL);
  43.             ballPanel.setDelay(jsbDelay.getMaximum());
  44.             setLayout(new BorderLayout());
  45.             add(jsbDelay, BorderLayout.NORTH);
  46.             add(ballPanel, BorderLayout.CENTER);
  47.             add(panel, BorderLayout.SOUTH);
  48.  
  49.             // Register listeners
  50.             jbtSuspend.addActionListener(new Listener());
  51.             jbtResume.addActionListener(new Listener());
  52.             jbtAdd.addActionListener(new Listener());
  53.             jbtSubtract.addActionListener(new Listener());
  54.             jsbDelay.addAdjustmentListener(new AdjustmentListener() {
  55.                 @Override
  56.                 public void adjustmentValueChanged(AdjustmentEvent e) {
  57.                     ballPanel.setDelay(jsbDelay.getMaximum() - e.getValue());
  58.                 }
  59.             });
  60.         }
  61.  
  62.         class Listener implements ActionListener {
  63.  
  64.             @Override
  65.             public void actionPerformed(ActionEvent e) {
  66.                 if (e.getSource() == jbtSuspend) {
  67.                     ballPanel.suspend();
  68.                 } else if (e.getSource() == jbtResume) {
  69.                     ballPanel.resume();
  70.                 } else if (e.getSource() == jbtAdd) {
  71.                     ballPanel.add();
  72.                 } else if (e.getSource() == jbtSubtract) {
  73.                     ballPanel.subtract();
  74.                 }
  75.             }
  76.         }
  77.     }
  78.  
  79.     class BallPanel extends JPanel {
  80.  
  81.         private int delay = 10;
  82.         private ArrayList<Ball> list = new ArrayList<Ball>();
  83.  
  84.         // Create a timer with the initial delay
  85.         protected Timer timer = new Timer(delay, new ActionListener() {
  86.             @Override
  87.             /**
  88.              * Handle the action event
  89.              */
  90.             public void actionPerformed(ActionEvent e) {
  91.                 repaint();
  92.             }
  93.         });
  94.  
  95.         public BallPanel() {
  96.             timer.start();
  97.         }
  98.  
  99.         public void add() {
  100.             list.add(new Ball());
  101.         }
  102.  
  103.         public void subtract() {
  104.             if (list.size() > 0) {
  105.                 list.remove(list.size() - 1); // Remove the last ball
  106.             }
  107.         }
  108.  
  109.         @Override
  110.         protected void paintComponent(Graphics g) {
  111.             super.paintComponent(g);
  112.  
  113.             for (int i = 0; i < list.size(); i++) {
  114.                 Ball ball = (Ball) list.get(i); // Get a ball
  115.                 g.setColor(ball.color); // Set ball color
  116.  
  117.                 // Check boundaries
  118.                 if (ball.x < 0 || ball.x > getWidth()) {
  119.                     ball.dx = -ball.dx;
  120.                 }
  121.  
  122.                 if (ball.y < 0 || ball.y > getHeight()) {
  123.                     ball.dy = -ball.dy;
  124.                 }
  125.  
  126.                 // Adjust ball position
  127.                 ball.x += ball.dx;
  128.                 ball.y += ball.dy;
  129.                 g.fillOval(ball.x - ball.radius, ball.y - ball.radius,
  130.                         ball.radius * 2, ball.radius * 2);
  131.             }
  132.  
  133.         }
  134.  
  135.         public void suspend() {
  136.             timer.stop();
  137.         }
  138.  
  139.         public void resume() {
  140.             timer.start();
  141.         }
  142.  
  143.         public void setDelay(int delay) {
  144.             this.delay = delay;
  145.             timer.setDelay(delay);
  146.         }
  147.     }
  148.  
  149.     class Ball {
  150.  
  151.         int x = 0;
  152.         int y = 0; // Current ball position
  153.         int dx = 2; // Increment on ball's x-coordinate
  154.         int dy = 2; // Increment on ball's y-coordinate
  155.         int radius = 5; // Ball radius
  156.         Color color = new Color((int) (Math.random() * 256),
  157.                 (int) (Math.random() * 256), (int) (Math.random() * 256));
  158.     }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top