当嵌入到 HTML 页面中时,删除 java 小程序中的外部白色边框

Remove outer white border in a java applet when embedded inside an HTML page

我是一个 dotnet 专家,我正在尝试为我的应用程序创建一个 java applet。我已经能够成功创建 applet 并且在我签名后它在我的应用程序中也能正常工作。

我遇到的唯一问题是,当我 embed 将它放入 HTML 文件 (在我的例子中是 .cshtml 文件),我看到小程序周围有白色边框,这不是 HTML.

中的样式

我一直在尝试摆脱边界,但我做不到。该小程序仅包含一个带有 Icon 的按钮。那是唯一的控件,我已将按钮的 border 属性 设置为 EmptyBorder

这是您在浏览器中查看按钮时的屏幕截图。

注意屏幕截图中的 DxDx 是一个 java applet,您可以注意到它周围的 WHITE 边框。

这是HTML

<applet width="55" height="40" border="0" 
        codebase="~/Content/My/applet" 
        id="DxApplet" name="DxApplet" 
        code="DxApplet.class" 
        archive="DxButtonApplet.jar">
    <param name="boxborder" value="false"> 
    @Html.Raw(ViewBag.AppletParameters)
</applet>

此外,我添加了以下 CSS 但这也没有帮助。

applet:focus {
    outline: none;
    -moz-outline-style: none;
} 

我还在小程序的init方法中添加了如下代码

jButton1Dx 按钮的名称。

jButton1.setBorder(null);
jButton1.setBorder(BorderFactory.createEmptyBorder());

但这也无济于事。

你能告诉我哪里错了吗?

这是精简的小程序代码:https://gist.github.com/anonymous/1f31a97b68d34a5821e9

如果您的整个小程序只是一个可点击区域,我根本不会使用 JButton。只需在 JPanel 上注册 MouseListener 即可。 JButton 带有许多额外的 "features" ,例如在 GUI 应用程序中非常棒的阴影和悬停行为,但不是您想要的小程序,因为小程序的唯一目的是处理一次单击。

您 运行 遇到的问题是因为您使用的是 Nimbus Look and Feel。如果您不知道自己在这样做,那就是自动生成代码的问题 - 它会执行您没有要求它执行的操作。

.setBorder() 的文档提到了这个问题:

Although technically you can set the border on any object that inherits from JComponent, the look and feel implementation of many standard Swing components doesn't work well with user-set borders.

所以您尝试覆盖边界没有做任何事情,因为您要求 Swing 使用 Nimbus LaF。

轻松修复:不要使用 Nimbus LaF;只需从 init().

中删除与 Nimbus 相关的代码

更好的解决方法: 不要使用 JButton,使用 JPanel 来监听点击和 JLabel to display your image。您不想要 JButton 的行为,所以不要使用它。这需要更多的努力(您必须使 JLabel 居中),但这是 "right" 的方法,您基本上可以将 jButton1 变成 JLabel 并且您的代码将起作用。

这是我最终看到的屏幕截图:

我没有调整 JLabel 解决方案的布局和颜色,所以它看起来不太好,但是你可以看到第二个或第三个小程序都没有边框。

更多参考资料:The Swing source code (take a look at JButton and AbstractButton; they do a lot of work you don't need here), Border with rounded corners & transparency, and Java rounded corners on JFrame?