【问题标题】:Exclude scrollbar of Java SWT Browser from event从事件中排除 Java SWT 浏览器的滚动条
【发布时间】:2025-12-18 11:30:01
【问题描述】:

打包的复合材料上有一个 SWT 浏览器。我在 SWT.MouseDown 事件上添加了一个侦听器,因此当单击浏览器时,我的自定义方法运行。 如果浏览器没有滚动条,它工作正常。我的问题是,当调整浏览器的大小时,滚动条会自动出现在浏览器的右侧,并且当滚动条上有 SWT.MouseDown 事件时,我的自定义方法会运行,这是不正确的行为。

如果浏览器有滚动条 SWT.MouseDown 事件不应该执行我的自定义方法。 有没有办法做到这一点?

是 Browsers 自带的滚动条,Browsers 是用 SWT.NONE 风格调用的,所以 getVerticalBar() 或 getHorizo​​ntalBar() 方法都返回 null。

【问题讨论】:

    标签: java browser swt scrollbar


    【解决方案1】:

    我发现的解决方法: 滚动条可以通过html字符串中的标签来控制。

    如果我想隐藏滚动条,请将其添加到 html 字符串中。

    <body style='overflow:hidden;'>
    

    而且这个总是显示出来的:

    <body style='overflow:scroll;'
    

    我添加了后者并在我的侦听器中设置了一个条件,仅当用户单击小部件的任何部分但滚动条时才执行我的方法。

        switch (event.type) {
                        case SWT.MouseDown:
                            if (getSize().x - event.x > SCROLLBAR_WIDTH && getSize().y - event.y > SCROLLBAR_WIDTH) {
    // Do this when clicking on widget, but not on scrollbar.
    }
    

    SCROLLBAR_​​WIDTH 值基于反复试验,因此并不完美,但希望能达到目的。

    【讨论】: