Hello, I am trying to make a program that allows the user to click anywhere on a JPanel to create a "bubble". I want there to be multiple bubbles, in essence I want the number of bubbles the user can create to be infinite. So far, I can create a bubble, place it anywhere, and also change the color. The problem is, I can only create one bubble. I made an ArrayList and a addCircle method, but I am unsure how to implement it. Any help is appreciated!
The framework class
The MakeBubbles class to handle the graphic objects
The framework class
import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class Soap extends JFrame implements ActionListener { private JButton setSize = new JButton("SET RADIUS"); private JButton green = new JButton("GREEN"); private JButton red = new JButton("RED"); private JLabel info = new JLabel("New Radius: "); private JTextField newR = new JTextField(8); private MakeBubbles bb = new MakeBubbles(); Soap(){ setLayout(new BorderLayout()); JPanel main = new JPanel(new FlowLayout(FlowLayout.CENTER)); main.add(green); main.add(red); main.add(info); main.add(newR); main.add(setSize); add(main, BorderLayout.SOUTH); add(bb, BorderLayout.CENTER); setSize.addActionListener(this); green.addActionListener(this); red.addActionListener(this); } public void actionPerformed(ActionEvent e){ int num = Integer.parseInt(newR.getText()); bb.setRadius(num); if (e.getSource() == red){ bb.getGraphics(); bb.setColor(Color.RED); }if (e.getSource() == green){ bb.getGraphics(); bb.setColor(Color.GREEN); } } public static void main(String[] args){ Soap s1 = new Soap(); s1.setVisible(true); s1.setSize(500,300); s1.setResizable(true); s1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
The MakeBubbles class to handle the graphic objects
public class MakeBubbles extends JPanel implements MouseListener { private int X, Y; private int radius = 24; private Color c = Color.CYAN; public ArrayList<MakeBubbles> lBub = new ArrayList<MakeBubbles>(); MakeBubbles(){ addMouseListener(this); } protected void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setColor(c); g2.fillOval(X,Y,radius,radius); //repaint(); } public void addCircle(MakeBubbles newBubble){ lBub.add(newBubble); } public void setRadius(int newR){ this.radius = newR; } public void setColor(Color newC){ this.c = newC; } public void setX(int newXC){ this.X = newXC; } public void setY(int newYC){ this.Y = newYC; } public void mouseClicked(MouseEvent e) { int X = e.getX(); int Y = e.getY(); setX(X); setY(Y); repaint(); } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent arg0) { } }