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

时间:2015-07-17 16:47:14

标签: java html css applet

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

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

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

这是在浏览器中查看按钮时的屏幕截图。
Dx Button Image
注意屏幕截图中的 Dx Dx 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;
} 

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

jButton1 Dx 按钮的名称。

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

但这也没有帮助。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

  

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

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

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

更好的解决方法:不要使用JButton,使用JPanel来收听点击次数和JLabel to display your image。您不希望 JButton的行为,因此请勿使用它。这是一个更多的努力(你必须使JLabel居中),但它是&#34;右边&#34;这样做的方法,你基本上可以将jButton1变成JLabel,你的代码就可以了。

这是我最终看到的截图:

Screenshot of three different versions of the applet; original, Nimbus-disabled, and JLabel instead of JButton

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

更多参考文献:The Swing source code(看看JButtonAbstractButton;他们做了很多你不需要的工作),Border with rounded corners & transparency ,和Java rounded corners on JFrame?