Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.03.2024
Сообщений: 1

Создание дополнительных всплывающих окон

08.03.2024, 10:56. Показов 1016. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Создал JFrame1 с надписью label1, при наведении на label1 появляется Jframe2 с label2. При наведении на label2, появляется Jframe3 с label3.

Когда курсор покидает границы окна, окно должно закрываться.

Проблема:
Когда курсор наводится на label2 JFrame2 закрывается, а должно быть оставаться открытым.

Закрываться окно должно только тогда, когда курсор покидает границы окна.

Вот код:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
 
public class Main {
    // Флаги, указывающие, открыты ли JFrame2 и JFrame3
    private static boolean isJFrame2Open = false;
    private static boolean isJFrame3Open = false;
    private static JFrame frame3;
 
    public static void main(String[] args) {
        // Создаем JFrame1
        JFrame frame1 = new JFrame("JFrame 1");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLayout(new FlowLayout());
 
        // Создаем метку label1
        JLabel label1 = new JLabel("Label 1");
        frame1.add(label1);
 
        // Устанавливаем слушатель для label1
        label1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                if (!isJFrame2Open) {
                    // Получаем координаты label1
                    Point location = label1.getLocationOnScreen();
 
                    // Создаем и отображаем JFrame2 рядом с label1
                    createAndShowJFrame2(location.x, location.y);
                    isJFrame2Open = true;
                }
            }
        });
 
        frame1.setSize(300, 200);
        frame1.setVisible(true);
    }
 
    // Метод для создания и отображения JFrame2
    private static void createAndShowJFrame2(int x, int y) {
        // Создаем JFrame2
        JFrame frame2 = new JFrame("JFrame 2");
        frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // Закрываем только JFrame2
        frame2.setLayout(new FlowLayout());
 
        // Создаем метку label2 в JFrame2
        JLabel label2 = new JLabel("Label 2");
        frame2.add(label2);
 
        // Добавляем слушатель события закрытия JFrame2
        frame2.addWindowListener(new java.awt.event.WindowAdapter() {
            @Override
            public void windowClosed(java.awt.event.WindowEvent windowEvent) {
                isJFrame2Open = false; // Устанавливаем флаг в false при закрытии JFrame2
            }
        });
 
        // Устанавливаем слушатель для label2
        label2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                if (!isJFrame3Open) {
                    // Получаем координаты относительно родительского компонента
                    Point location = label2.getLocation();
                    createAndShowJFrame3(location.x, location.y);
                    isJFrame3Open = true;
                }
            }
        });
 
        frame2.setLocation(x + 20, y + 20);
        frame2.setSize(300, 200);
        frame2.setVisible(true);
 
        // Добавляем слушатель мыши для JFrame2
        frame2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseExited(MouseEvent e) {
                frame2.dispose(); // Закрываем JFrame2 при перемещении курсора за его пределы
            }
        });
    }
 
 
    // Метод для создания и отображения JFrame3
    private static void createAndShowJFrame3(int x, int y) {
        frame3 = new JFrame("JFrame 3");
        frame3.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // Закрываем только JFrame3
        frame3.setLayout(new FlowLayout());
 
        // Создаем метку label3 в JFrame3
        JLabel label3 = new JLabel("Label 3");
        frame3.add(label3);
 
        // Добавляем слушатель мыши для отслеживания перемещения курсора за пределы JFrame3
        frame3.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseExited(MouseEvent e) {
                // Закрываем JFrame3 при перемещении курсора за его пределы
                frame3.dispose();
                isJFrame3Open = false; // Устанавливаем флаг в false при закрытии JFrame3
            }
        });
 
        frame3.setLocation(x + 100, y);
        frame3.setSize(300, 200);
        frame3.setVisible(true);
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2024, 10:56
Ответы с готовыми решениями:

Настройка всплывающих окон
Здравствуйте! Подскажите, пожалуйста, материал, где подробно изложен материал по JOptionPane, с настройками надписей, названий окон,...

Создание дополнительных классов
Привет, помогите. Нужно реализовать класс, в котором будут храниться переменные, в классе реализовать методы чтения, записи и проверки...

Создание новых всплывающих окон
Вопрос таков- необходимо реализовать вывод на экран новых окон с сообщениями (по типу того как в vk.com) по нажатию на кнопку. Подскажите...

1
wound up as Aussie
463 / 115 / 20
Регистрация: 15.05.2019
Сообщений: 456
03.07.2024, 15:43
Цитата Сообщение от Nek16 Посмотреть сообщение
Проблема:
Когда курсор наводится на label2 JFrame2 закрывается, а должно быть оставаться открытым.
Если добавите один "костылек", то окно закрываться не будет, хотя и мигнёт.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Устанавливаем слушатель для label2
        label2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                if (!isJFrame3Open) {
                    frame2.setVisible(isJFrame2Open); // "КОСТЫЛЬ" ;
                    // Получаем координаты относительно родительского компонента
                    Point location = label2.getLocation();
                    createAndShowJFrame3(location.x + 100, location.y + 200);
                    isJFrame3Open = true;
                    // а если здесь setVisible, то окно 2 остаётся активным. 
                    //frame2.setVisible(isJFrame2Open);
                }
            }
        });
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2024, 15:43
Помогаю со студенческими работами здесь

Создание всплывающих окон на HTML5 и CSS3
Добрый день! Создал всплывающее окно как описанно в этой статье - http://kpasav.blogspot.ru/2012/10/html5-css3.html все прописал как...

Формы в VBA. Создание дополнительных окон TextBox
Начал осваивать VBA. В процессе написания программы задался вопросом, а возможно сделать так, что при определенном выборе в ComboBox'e...

Стиль всплывающих окон
Привет всем, Ребята подскажите какой стиль отвечает за всплывающие окна или что вообще за это отвечает Быстрое редактирование,...

Конфликт всплывающих окон
Здравствуте! У меня есть два всплывающих окна <div class="popup question"> <div class="popup-container"> <div...

Блокирование всплывающих окон
Сем приет! Я так понимаю, включил блокирование всплывающих окон, обратную операцию проделать не могу. В настройках программы галочка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru