Zmiana koloru prostokąta i kursora myszy po najechaniu na niego

0

Siema, napisałem taki kod:

public class Prz extends JFrame {

    public Prz() {
        setSize(400, 300);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setTitle("Test");
    }

    public void paint(Graphics g) {

        g.setColor(Color.yellow);
        g.fillRect(50, 50, 100, 70);
        
    }

    public static void main(String args[]) {
        new Prz();
    }
}

Jak widać wyświetla w oknie aplikacji żółty prostokąt. Chciałbym żeby ten prostokąt zmieniał kolor na inny oraz kursor myszy na "łapkę" po najechaniu na niego myszką. Jak można coś takiego zrobić?

Jestem na tym etapie i nie wiem co dalej...

public class Prz extends JFrame implements MouseListener, MouseMotionListener {

    public Prz() {
        setSize(400, 300);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setTitle("Test");
    }

    public void paint(Graphics g) {

        g.setColor(Color.yellow);
        g.fillRect(50, 50, 100, 70);
        
    }

    public static void main(String args[]) {
        new Prz();
    }

    public void mouseClicked(MouseEvent me) {
    }

    public void mousePressed(MouseEvent me) {
    }

    public void mouseReleased(MouseEvent me) {
    }

    public void mouseEntered(MouseEvent me) {
    //po najechaniu myszką
    }

    public void mouseExited(MouseEvent me) {
    }

    public void mouseDragged(MouseEvent me) {
    }

    public void mouseMoved(MouseEvent me) {
    }
}

Zwykle kursor zmieniałem przy użyciu:

setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

... ale w tym przypadku nie potrafię tego ogarnąć. Proszę o pomoc.

0

Musisz w oknie umieścić komponent, który będzie reagował na "wjazd" i "wyjazd" myszy. Poniższy program reaguje na "wjazd" i "wyjazd" myszy w frame (z frama).

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Prz extends JFrame implements MouseListener, MouseMotionListener {
 
    private Color color = Color.YELLOW;
    public Prz() {
        setSize(400, 300);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setTitle("Test");
        addMouseListener(this);
    }
 
    public void paint(Graphics g) {
        g.setColor(color);
        g.fillRect(50, 50, 100, 70);
 
    }
 
    public static void main(String args[]) {
        new Prz();
    }
 
    public void mouseClicked(MouseEvent me) {
    }
 
    public void mousePressed(MouseEvent me) {
    }
 
    public void mouseReleased(MouseEvent me) {
    }
 
    public void mouseEntered(MouseEvent me) {
        me.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        color = Color.BLUE;
        repaint();
    //po najechaniu myszką
    }
 
    public void mouseExited(MouseEvent me) {
        me.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        color = Color.YELLOW;
        repaint();        
    }
 
    public void mouseDragged(MouseEvent me) {
    }
 
    public void mouseMoved(MouseEvent me) {
    }
}

W obecnej wersji programu me.getComponent() jest zbyteczne, potem stanie się konieczne.

1

Po pierwsze, nie prowadź dyskusji w komentarzach.
Po drugie, przeczytałeś pierwsze zdanie mojego postu?

Musisz w oknie umieścić komponent, który będzie reagował na "wjazd" i "wyjazd" myszy

A dokładniej, ten prostokąt musi być komponentem: panel, button, textarea....Np. coś takiego

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Prz extends JFrame implements MouseListener, MouseMotionListener {
 
    private JPanel panel = new JPanel();
    public Prz() {
        setSize(400, 300);
        setLayout(null);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Test");
        panel.setBounds(50,50,100,70);
        panel.setBackground(Color.YELLOW);
        panel.addMouseListener(this);
        add(panel);
        setVisible(true);
    }
 
    public static void main(String args[]) {
        new Prz();
    }
 
    public void mouseClicked(MouseEvent me) {
    }
 
    public void mousePressed(MouseEvent me) {
    }
 
    public void mouseReleased(MouseEvent me) {
    }
 
    public void mouseEntered(MouseEvent me) {
        me.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        panel.setBackground(Color.BLUE);
    }
 
    public void mouseExited(MouseEvent me) {
        me.getComponent().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        panel.setBackground(Color.YELLOW);
    }
 
    public void mouseDragged(MouseEvent me) {
    }
 
    public void mouseMoved(MouseEvent me) {
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1