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

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

08.03.2024, 10:56. Показов 974. Ответов 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
456 / 109 / 19
Регистрация: 15.05.2019
Сообщений: 444
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 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru