How to use only one MouseListener function without having to implement all methods?

24 Views Asked by At

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.

0

There are 0 best solutions below