我正在尝试制作一个程序,当您将鼠标悬停在某个元素上时,它将被设置为不可见,而在另一个位置将其设置为可见。但是,当我将鼠标悬停在按钮上时,什么也没有发生。没有编译器错误告诉我要解决的问题,所以我来了堆栈溢出。我对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缺乏经验,昨天才刚开始
因此,您需要学习的第一件事是如何使用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);
}