Закрытие окна при нажатии в любое место за его определами - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день, помогите советом. Есть кнопка которая открывает окно, типа меню, но не меню, на то есть причины. Мне нужно сделать так, чтобы оно закрывалось как JPopupMenu у JMenu при нажатии куда-либо за его пределами, у меня есть идея я координатами, но нужно отлавливать абсолютно все щелчки мыши, даже за пределами моего окна, получать их координаты и сравнивать с координатами, которые занимает это моё типа меню, если не совпадают делаем его невидимым совпадает оставляем как есть, но не знаю как отлавливать абсолютно все щелчки мыши которые происходят при работе с компьютером. Буду рад почитать и ваши предложение по поводу решения данной проблемы)

Решение задачи: «Закрытие окна при нажатии в любое место за его определами»

textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
 
 
public class MainFrame extends JFrame {
 
    MainFrame() {
        setSize(new Dimension(500, 500));
        setLocationRelativeTo(null);
        setLayout(null);
 
        Win win = new Win();
 
        JButton openWin = new JButton("open new Win");
        openWin.setSize(150, 30);
        openWin.setLocation(300, 20);
        openWin.addActionListener(e -> win.open());
        add(openWin);
 
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new MainFrame();
    }
 
}
 
class Win extends JFrame {
 
    Win() {
        setSize(new Dimension(300, 100));
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
 
        setLayout(null);
        JButton button = new JButton("button");
        button.setSize(100, 50);
        button.setLocation(0, 0);
        add(button);
 
        addWindowFocusListener(new WindowFocusListener() {
            @Override
            public void windowGainedFocus(WindowEvent e) {
 
            }
 
            @Override
            public void windowLostFocus(WindowEvent e) {
                setVisible(false);
            }
        });
    }
 
    void open() {
        setVisible(true);
    }
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы