I can already create a ball in the panel on MousePressed and MouseReleased and update the coordinates with the MotionListener and change the color of the ball when the mouse is over it. This works great in the myPanel class, because the panel has certain dimensions, and the mouse works inside it. But what I need to do now, and I'm not sure how to get the Ball class to extend the component and implement MouseListener. And with that, I have to use MouseEntered in the Ball class to change the color of the ball. Help?
//Ball import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Ball extends JComponent implements MouseListener{ public int x,y,r; public Color c = Color.BLUE; private int distance = 0; public Ball(int X, int Y, int R){ super(); x=X; y=Y; r=R; addMouseListener(this); } public void draw(Graphics g){ g.setColor(c); g.fillOval(xr, yr, 2*r, 2*r); } public void mousePressed(MouseEvent me){} public void mouseReleased(MouseEvent me){ } public void mouseClicked(MouseEvent me){} public void mouseEntered(MouseEvent me){ c = Color.ORANGE; } public void mouseExited(MouseEvent me){} } //myPanel import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.MouseInputAdapter; public class myPanel extends JPanel implements MouseListener{ private Color c = new Color(150,200,100); public Ball ball = new Ball(100,100,50); private Point mouseCoords = new Point(); public myPanel(){ super(); setLayout(new FlowLayout()); addMouseListener(this); add(ball); } public void paintComponent(Graphics g){ super.paintComponent(g); ball.draw(g); } public void mousePressed(MouseEvent me){ ball.x = me.getX(); ball.y = me.getY(); labelPanel.setX(me.getX()); //Report x and y values labelPanel.setY(me.getY()); // ball.c = Color.RED; //change color on click repaint(); } public void mouseReleased(MouseEvent me){} public void mouseMoved(MouseEvent me) {} public void mouseClicked(MouseEvent me){} public void mouseEntered(MouseEvent me){} public void mouseExited(MouseEvent me){} } // myFrame import java.awt.*; import javax.swing.*; public class myFrame extends JFrame{ public myPanel left = new myPanel(); public labelPanel right = new labelPanel(); public myFrame(){ super("This is my Frame"); setLayout(new BorderLayout()); setSize(900,700); add(left,BorderLayout.CENTER); add(right,BorderLayout.EAST); setVisible(true); } public static void main(String[] args){ myFrame mF = new myFrame(); mF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } //labelPanel import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.MouseInputAdapter; public class labelPanel extends JPanel{ public static JLabel xCoord = new JLabel("X=",JLabel.RIGHT); public static JLabel yCoord = new JLabel("Y=",JLabel.RIGHT); public Color c = new Color(100,200,10); public labelPanel() { super(); setBackground(c); setLayout(new GridLayout(2,1)); add(xCoord); add(yCoord); } public static void setX(int x){ xCoord.setText("X=" + x); } public static void setY(int y){ yCoord.setText("Y=" + y); } }
So, if you run the code, it works as previously mentioned, but I donβt know how to define the Ball class as a component / JComponent so that it implements MouseEntered
source share