So basically I did an exercise before where we only used a single method of the MouseListener class (see 1st code), and I thought I understood how MouseAdapters work so I tried to implement it in my own project to make a button change color when it is pressed/released (see 2nd code), but apparently it is asking me to "The type HomeScreen must implement the inherited abstract method MouseListener.mouseEntered(MouseEvent)".
First code:
package DragDrop;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class DragPanel extends JPanel{
ImageIcon image = new ImageIcon("image.png");
final int WIDTH = image.getIconWidth();
final int HEIGTH = image.getIconHeight();
Point imageCorner;
Point prevPt;
DragPanel(){
imageCorner = new Point(0,0);
ClickListener clickListener = new ClickListener();
DragListener dragListener = new DragListener();
this.addMouseListener(clickListener);
this.addMouseMotionListener(dragListener);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
image.paintIcon(this, g, (int)imageCorner.getX(), (int)imageCorner.getY()) ;
}
private class ClickListener extends MouseAdapter{
public void mousePressed(MouseEvent e){
prevPt = e.getPoint();
}
}
private class DragListener extends MouseMotionAdapter{
public void mouseDragged(MouseEvent e){
Point currentPt = e.getPoint();
imageCorner.translate(
(int)(currentPt.getX()-prevPt.getX()),
(int)(currentPt.getY()-prevPt.getY()));
prevPt = currentPt;
repaint();
}
}
}
Second code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class HomeScreen extends JPanel {
JPanel startButtonPanel = new JPanel();
JLabel titleLabel = new JLabel("Izara's Adventure");
Font titleFont = new Font("Noganas Regular",Font.PLAIN,90);
Font textFont = new Font("Noganas Regular",Font.PLAIN,50);
JButton startButton = new JButton("Start");
Color customGreen = new Color(0x35b875);
Color customPurple = new Color(0x49145a);
HomeScreen(){
ClickListener clickListener = new ClickListener();
this.setBounds(0, 100, 1024,150);
this.setBackground(Color.black);
startButtonPanel.setBounds(350, 350, 324, 150);
startButtonPanel.setBackground(Color.black);
startButton.setPreferredSize(new Dimension(200, 90));
startButton.setBackground(Color.BLACK);
startButton.setFocusable(false);
startButton.setForeground(customGreen);
startButton.setFont(textFont);
startButton.addMouseListener(clickListener);
startButton.setBorder(BorderFactory.createDashedBorder(customGreen,3,5,3,false));
startButtonPanel.add(startButton);
titleLabel.setFont(titleFont);
titleLabel.setForeground(customGreen);
this.add(titleLabel);
}
private class ClickListener extends MouseAdapter{
public void mousePressed(MouseEvent e){
startButton.setBackground(customPurple);
}
public void mouseReleased(MouseEvent e){
startButton.setBackground(Color.BLACK);
}
}
}
To me as a beginner programmer there is no difference in how I used it in my practice project and my current one, so please help me understand what I'm missing!
Also I'm aware of a very similar question where the answer was to define my adapter as:
MouseListener mouseLtnr = new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
But firstly I think defining it like this is uglier than the way my practice exercise did it and secondly I really want to understand why it worked in the first place, but not now.