当前位置: 首页 > 知识库问答 >
问题:

检测用户何时关闭浮动工具栏框架

索瀚海
2023-03-14

用户尝试在摇摆中关闭浮动工具栏窗口时,可以捕获事件吗?提前感谢。

共有1个答案

鲍向笛
2023-03-14

可能有一些非常简单的解决方案,但是你为什么要使用它呢?

我能想到的最好的方法(不扩展我自己的工具栏)是在工具栏中添加一个<code>AncestorListener</code>并监视它的事件。

不过,我采用这种方法的问题是,您需要知道最初连接到的主框架,这可能不方便。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

public class TestFloatingToolBar {

    public static void main(String[] args) {
        new TestFloatingToolBar();
    }

    public TestFloatingToolBar() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                final JFrame frame = new JFrame("Test");

                final JToolBar tb = new JToolBar();
                tb.add(new JButton("Pop"));
                tb.setFloatable(true);

                tb.addAncestorListener(new AncestorListener() {
                    @Override
                    public void ancestorAdded(AncestorEvent event) {
                        tell();
                        if (SwingUtilities.getWindowAncestor(tb).equals(frame)) {
                            System.out.println("...In Main Frame");
                        } else {
                            System.out.println("...Maybe floating");
                        }
                    }

                    @Override
                    public void ancestorRemoved(AncestorEvent event) {
                        tell();
                        if (SwingUtilities.getWindowAncestor(tb).equals(frame)) {
                            System.out.println("...In Main Frame");
                        } else {
                            System.out.println("...Maybe floating");
                        }
                    }

                    @Override
                    public void ancestorMoved(AncestorEvent event) {
                    }
                });

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(tb, BorderLayout.NORTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public void tell() {
        Exception exp = new Exception();
        StackTraceElement[] stackTrace = exp.getStackTrace();
        System.out.println(stackTrace[1].getMethodName());
    }

}
 类似资料:
  • 我在用我的代码运行ussd代码。返回结果后,用户将按ok按钮关闭对话框。我想检测用户何时这样做。

  • 问题内容: 我正在尝试在我的c程序中检测从Linux关闭或重新启动。我发现程序可以使用signal(SIGTERM,handler)(SIGKILL,handler)。但是,如果用户也使用命令杀死该进程,这两个触发器也会触发。 他们说,在某些解决方案中,可以使用运行级别,但无法运行。在系统初始化运行级别之前,不知道该进程是否被杀死。我什至尝试将脚本放在rcx.d中,但仍然无法正常工作。 有人建议吗

  • 检测Android应用的启动与关闭 原文链接 : Determine when App is Opened or Closed 原文作者 : Bill Donahue 译文出自 : 开发技术前线 www.devtf.cn 译者 : xianjiajun 校对者: Mr.Simple 校对者: chaossss 状态 : 完成 问题 当开发安卓程序的时候,我们不免需要去检测应用什么时候在前台运行,用

  • 问题内容: 嗨,我正在创建一个Web应用程序,如果用户注册,我们将在其中显示创建日期。 为此,我们在sql表中使用当前时间戳记,其中显示了服务器时间,但是我们不知道如何根据用户时区转换时间。 因为我们没有 得到用户所在的国家 。 可以帮我解决这个问题吗 提前致谢 :) 问题答案: 使用JavaScript解决方案 http://www.onlineaspect.com/2007/06/08/aut

  • 当想下滚动页面的时候,Framework7可以让导航栏和工具栏自动隐藏。 如果你想全局启用这个功能,你只需要在 应用初始化 时候设置这几个参数:hideNavbarOnPageScroll, hideToolbarOnPageScroll, hideTabbarOnPageScroll 和 showBarsOnPageScrollEnd: 如果你只想在某些特定页面打开自动隐藏的功能,你可以通过添加

  • 我有显示iBeacon信息的文本视图(例如uuid、major、minor等)和一个用于启动/停止扫描的检测/停止按钮。当我在iBeacon关闭的情况下按下按钮开始扫描时,应用程序没有显示预期的内容。但是,当我在iBeacon打开时开始扫描,然后在扫描时关闭iBeacon时,应用程序仍会显示信息,就好像它仍在检测iBeacon一样。当应用程序在信标打开的情况下扫描BLE时,它会给出 D/Bluet