繁体   English   中英

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

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

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

我唯一的问题是当我embedembedHTML文件中时(在我的例子中是.cshtml文件) ,我看到applet周围有一个白色边框,这不是HTML中的样式。

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

这是在浏览器中查看按钮时的屏幕截图。
Dx按钮图像
注意屏幕截图中的Dx Dx是一个java applet ,您可以注意到它周围的白色边框。

这是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;
} 

我还在applet的init方法中添加了以下代码

jButton1Dx按钮的名称。

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

但这也没有帮助。

你能告诉我我哪里错了吗?

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

如果您的整个applet只是一个可点击区域,我根本不会使用JButton 只需在JPanel上注册一个MouseListener就可以了。 JButton附带了许多额外的“功能”,如阴影和悬停行为,这在GUI应用程序中很棒,但不是你想要的applet,它的唯一目的是处理单击。

您遇到的问题是因为您正在使用Nimbus外观和感觉 如果你不知道你在做那件事,那就是自动生成代码的问题 - 它会做你没有要求的事情。

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

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

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

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

更好的解决方法:不要使用JButton ,使用JPanel监听点击,使用JLabel显示图像 您不希望 JButton的行为,所以不要使用它。 这是一个更多的努力(你必须集中JLabel ),但这是“正确”的方式,你可以基本上将jButton1变成JLabel ,你的代码将工作。

这是我最终看到的截图:

applet的三个不同版本的屏幕截图;原始的,Nimbus-disabled和JLabel而不是JButton

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

更多参考文献: Swing源代码 (看看JButtonAbstractButton ;它们做了很多你不需要的工作), 带有圆角和透明度的边框 ,以及JFrame上的Java圆角?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM