Нет javac ошибка компилятора, но метод mouseEntered не работает - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать программу, в которой при наведении курсора на элемент он будет установлен как невидимый, а новый будет установлен видимым в другом месте. Однако при наведении указателя мыши на кнопку ничего не происходит. Нет ошибки компилятора, чтобы сказать мне, что исправить, поэтому я пришел к переполнению стека. Я очень неопытен в 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);
    }
}

1 Ответ

0 голосов
/ 08 мая 2020

Я очень неопытен в Java и только вчера начал

Итак, первое, что вам нужно узнать, это как выполнить базовую c отладку с помощью System. out.println (…), чтобы убедиться, что logi c делает то, что вы ожидаете. Например:

@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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...