Swing:GlassPane 防止鼠标指针改变

2024-01-01

我有一个 JTabbedPane,其中有一些选项卡以及选项卡旁边有很多未使用的额外空间。所以我尝试使用它并在那里放置一些按钮(就像在 Eclipse 中一样)。我将按钮放在 GlassPane 上:

        JPanel glasspane = getPanelWithButtons();
        // panel with FlowLayout.RIGHT
        frame.setGlassPane(glasspane);
        glasspane.setOpaque(false);
        glasspane.setVisible(true);

这有效,我仍然可以点击我的 gui 的其他元素(我发现的大多数搜索结果都是关于如何prevent这)。到目前为止唯一的问题是,当鼠标指针悬停在 JSplitPane 的栏上时,鼠标指针不会更改为双端水平箭头。我怎样才能恢复这种行为?

EDIT

我发现没有鼠标改变事件any显示玻璃板下方的组件。这些组件会将鼠标光标更改为手形光标、变焦镜头等。这些鼠标指针更改都不再产生影响。我想这是因为对于玻璃窗格,需要对玻璃窗格进行鼠标指针更改,但我不想手动更改所有鼠标指针。


出色地。我知道该怎么做了。

虽然我花了5个多小时才明白后面的所有东西,但是解决办法却很简单。

只需覆盖玻璃面板的“public boolean contains(int x, int y)”方法即可。

public static void main(String[] args)
{
    final JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setSize(800, 600);

    final JSplitPane panel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JPanel(), new JPanel());

    frame.getContentPane().add(panel, BorderLayout.CENTER);

    final JPanel glassPane = new JPanel(){
        @Override
        public boolean contains(int x, int y)
        {
            Component[] components = getComponents();
            for(int i = 0; i < components.length; i++)
            {
                Component component = components[i];
                Point containerPoint = SwingUtilities.convertPoint(
                    this,
                    x, y,
                    component);
                if(component.contains(containerPoint))
                {
                    return true;
                }
            }
            return false;
        }
    };
    glassPane.setOpaque(false);
    JButton button = new JButton("haha");
    button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("haha");
        }
    });
    glassPane.add(button);
    glassPane.setBorder(BorderFactory.createLineBorder(Color.red));
    frame.setGlassPane(glassPane);

    //try to comment out this line to see the difference.
    glassPane.setVisible(true);

    frame.setVisible(true);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swing:GlassPane 防止鼠标指针改变 的相关文章

随机推荐

  • 使用 iTextSharp 从现有 PDF 中读取 XMP

    如何使用 iTextSharp 从现有 PDF 文件中读取 XMP 我对 itextSharp 非常无知 但这对我来说很有效 PdfReader pdf new PdfReader fileName string metadataXml S
  • HTML + Javascript 渲染器输出 HTML 或纯文本?

    如果我使用 String plain Html fromHtml html toString 渲染简单的 html 其中包含 any plain vanila HTML goes here 一切都美好而花花公子 但是 如果该页面包含大量 J
  • Java 如何使 JFrame 作为最大化窗口启动

    我想知道如何使 java JFrame 最大化 我不希望它是全屏的 周围没有窗口 我只是希望它像普通程序 例如网络浏览器 一样启动 我已经知道如何使用 Dimension screenSize Toolkit getDefaultToolk
  • Safari - 当选项卡位于后台时,HTML5 音频不会播放

    我有一个反应应用程序 它使用反应声音 基本上是 HTML5 音频 在触发新通知时播放声音 我希望当选项卡在 Safari 中处于后台时播放此声音 但这似乎不起作用 当选项卡位于前台时 声音会播放 有谁知道这个问题的解决方法 None
  • Chrome 中的 .blur 和 .onblur

    更新了没用 http jsfiddle net xvepL 4 http jsfiddle net xvepL 4 让我有点抓狂 Chrome 不使用 blur 仅适用于 onblur 但其他浏览器使用 blur 有没有办法解决这个问题 这
  • 自动热键 3 次点击 = 音量静音

    在 autohotkey 中 我试图做到这一点 以便当我按下鼠标左键 3 次并延迟 10 毫秒它变成音量静音 LButton if Send Volume Mute else Send LButton Return Use A TickCo
  • Pytest 仅运行具有特定标记属性的测试

    我在用着 pytest mark为了唯一地标识特定的测试 因此我创建了自定义标记 pytest mark key 我这样使用它 pytest mark key test 001 def test simple self self passi
  • 在 PHP 中使用heredoc有什么好处? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery 如果单选按钮被选中

    可能的重复 检查特定单选按钮是否已选中 https stackoverflow com questions 2195125 check of specific radio button is checked 我目前有这 2 个单选按钮 以便
  • nginx 和带有代理传递的尾部斜杠

    我对 nginx 1 4 1 使用以下配置 server listen 8000 server name correct name gr location test register proxy set header X Forwarded
  • WPF 按钮图标被镜像,为什么?

    当按如下方式定义图像时 此按钮看起来不错 请参见屏幕截图 请注意 带有字母 T 的盾形图标已正确显示
  • getnameinfo() - 反向 DNS 查找(IP 地址到主机名)C/C++

    对于 IPAddress 66 249 68 9 dig x 正确地说 crawl 66 249 68 9 googlebot com 我可爱的程序声称它是 ip68 9 0 0 ri ri cox net 我不在乎我最终是否会采用类似于下
  • 获取内存制造商

    有谁知道如何以编程方式检索 RAM 内存制造商 Thanks 现代 RAM 芯片上有一个附加的 EPROM 其中包含有关 RAM 的大量信息 其标准是 SPD 即串行存在检测 至少某些版本的 SPD 包含 JDEC 制造商代码 Look a
  • VBA“编译错误:语句在类型块之外无效”

    我正在 Excel 2010 中运行 VBA 宏并进行大量计算 因此数据类型非常重要 以尽可能缩短宏执行时间 我的优化想法是让用户选择所有数字将被声明为什么数据类型 同时指出每种数据类型的优缺点 准确性 灵活性和CPU密集度 宏执行时间之间
  • 为什么 matplotlib.pyplot.imshow 改变它的轴?

    我尝试在不同的子图中绘制图像 但由于某种原因 图像的轴在绘制时发生变化 为了演示这一点 在下面的示例中 我将图像绘制在 4 2 子图网格中 并不断检查第一张图像的轴是否保持不变 import matplotlib pyplot as plt
  • 为什么 WildFly 10 + JSF 2.3 无法与 Omnifaces 2.6.1 配合使用?

    我一直在尝试在 Wildfly 10 上使用 jsf 2 3 primefaces 6 和omnifaces 2 6 1 启动并运行一个应用程序 我已经拆分了 jsf 2 3 api 和 impl 并完成了 WildFly 的设置 应用程序
  • onItemClick strings.xml(不是 ListView/ArrayList)

    我有一个 on strings xml 文件 所有条目都显示在 ListView 上 现在我想对每个项目触摸 单击进行处理 我已经纠正了这段代码 gt public void onCreate Bundle savedInstanceSta
  • iOS 7 iAd 插页式广告无法被用户关闭

    当我显示插页式广告时 interstitial presentFromViewController self 我收到警告说此方法在 iOS 7 中已弃用 但它仍然可以正常工作 当我显示广告视图时 self requestInterstiti
  • SWIFT ALAssetsLibrary 未枚举组

    我试图将所有用户图像的缩略图收集到一个数组中 但是当我调用enumerateAssetsUsingBlock的方法ALAssetsLibrary似乎什么也没发生 import UIKit import AssetsLibrary class
  • Swing:GlassPane 防止鼠标指针改变

    我有一个 JTabbedPane 其中有一些选项卡以及选项卡旁边有很多未使用的额外空间 所以我尝试使用它并在那里放置一些按钮 就像在 Eclipse 中一样 我将按钮放在 GlassPane 上 JPanel glasspane getPa