没有javac编译器错误,但mouseEntered方法不起作用

问题描述 投票:0回答:1

我正在尝试制作一个程序,当您将鼠标悬停在某个元素上时,它将被设置为不可见,而在另一个位置将其设置为可见。但是,当我将鼠标悬停在按钮上时,什么也没有发生。没有编译器错误告诉我要解决的问题,所以我来了堆栈溢出。我对Java缺乏经验,所以我昨天才刚开始,所以如果您能为我做些傻事。这是我的代码:


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class hover {

    public static void main(String args[]) {

        JFrame f = new JFrame("Java Swing UI");
        GridLayout l = new GridLayout(2,4);
        JButton b = new JButton("Click me!");
        JButton b2 = new JButton("Click me!");
        f.setSize(500,300);
        f.setLayout(l);
        b.setBackground(Color.WHITE);
        b2.setBackground(Color.WHITE);
        f.add(b);
        f.add(b2);
        b2.setVisible(false);

        b.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(MouseEvent e) { 

                if (e.getSource() == f) {
                    b.setVisible(false);
                    b2.setVisible(true);
                }


            }

        });
        f.setVisible(true);
    }
}
java swing hover mouseevent mouselistener
1个回答
0
投票

我对Java缺乏经验,昨天才刚开始

因此,您需要学习的第一件事是如何使用System.out.println(...)进行一些基本的调试,以查看您的逻辑是否按照您的预期做。例如:

@Override
public void mouseEntered(MouseEvent e) { 
    System.out.println("mouse entered");
    if (e.getSource() == f) {
        System.out.println("if statement");
        b.setVisible(false);
        b2.setVisible(true);
    }
}

如果您这样做了,您会发现在运行代码时不会看到“ if语句”显示。所以问题是为什么?

b.addMouseListener(new MouseAdapter() {

您已将MouseListener添加到“ b”变量。

if (e.getSource() == f) {

但是您的if语句检查事件是否来自“ f”变量,该变量永远不会成立。

不需要if语句,因为只能为“ b”按钮生成事件。因此,您只需要:

@Override
public void mouseEntered(MouseEvent e) 
{ 
        b.setVisible(false);
        b2.setVisible(true);
}
© www.soinside.com 2019 - 2024. All rights reserved.