【问题标题】:Remove outer white border in a java applet when embedded inside an HTML page嵌入 HTML 页面时删除 Java 小程序中的外部白色边框
【发布时间】:2015-10-07 01:02:33
【问题描述】:

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

我遇到的唯一问题是,当我将 embed 放入 HTML 文件 (在我的情况下为 .cshtml 文件) 时,我看到小程序周围有一个白色边框,而这个不是 HTML 中的样式。

我一直试图摆脱边界,但我无法做到。小程序只包含一个按钮,它有一个Icon。这是唯一的控件,我已将按钮的border 属性设置为EmptyBorder

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

请注意屏幕截图中的 DxDxjava 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

【问题讨论】:

  • 在新开发的应用程序中依赖 Java 小程序是一个非常糟糕的主意。 Google Chrome 和 Microsoft Edge(Windows 10 中的新浏览器)不再支持 Java 插件,Firefox 和 Safari 默认禁用 Java 小程序——简而言之,如果需要 Java,您的网站将无法在许多浏览器中运行。除非您有其他任何东西都无法满足的特殊需求,否则我强烈建议您研究替代方案。
  • 我知道@duskwuff。我已经对此进行了研究,并且知道大多数新浏览器都不支持它。然而问题是这个小程序用于从本地文件系统打开文件,我看不到任何其他可以做到这一点的东西。它是一种医疗产品,并且有许多医生使用的其他组件无法放入 web 应用程序中。

标签: java html css applet


【解决方案1】:

如果您的整个小程序只是一个可点击区域,我根本不会使用JButton。只需在JPanel 上注册MouseListener,就可以了。 JButton 带有许多额外的“功能”,例如阴影和悬停行为,这在 GUI 应用程序中非常有用,但在一个仅用于处理单击的小程序中却不是您想要的。

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

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

虽然从技术上讲,您可以在任何继承自 JComponent 的对象上设置边框,但许多标准 Swing 组件的外观实现不能很好地使用用户设置的边框。

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

简单修复:不要使用 Nimbus LaF;只需从init() 中删除与 Nimbus 相关的代码即可。

更好的解决方法:不要使用JButton,使用JPanel 来监听点击,使用JLabel to display your image。你不想要 JButton 的行为,所以不要使用它。这需要更多的努力(您必须将JLabel 居中),但这是“正确”的做法,您基本上可以将jButton1 转换为JLabel,您的代码就可以工作。

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

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

更多参考资料:The Swing source code(看看JButtonAbstractButton;他们做了很多你不需要的工作)、Border with rounded corners & transparencyJava rounded corners on JFrame?

【讨论】:

  • 我已经将 背景 设置为黑色。我可以在面板内放一张图片吗?即使我删除按钮并使用 JPanel,如何删除外边框?它是所有 Java Applet 都有的吗?
  • 当然,您可以将所需的任何内容放入JPanel。外边框是JButton 的一部分,而不是小程序本身。您可以很容易地进行测试——只需注释掉添加按钮的行并查看小程序的外观。考虑发布SSCCE 小程序演示,以便我们复制您所看到的内容。
  • 另外,澄清一下,您是设置按钮的背景还是小程序的背景?
  • 是的。我已经将按钮的背景设置为黑色,并且容器背景也设置为黑色。让我试试你的建议。会在一段时间内通知您它是否有效。
  • 另外,如果你可以创建一个演示小程序,你可以分享我可以尝试复制/修复你看到的行为。
猜你喜欢
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2018-06-16
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多