我是一个dotnet的人,我正在尝试为我的应用程序创建一个java applet
。我已经能够成功创建applet
,并且在签名后我的应用程序也正常工作。
我唯一的问题是,当我embed
进入HTML
文件(在我的情况下是.cshtml文件)时,我看到一个白色的边框小程序,这不是HTML中的样式。
我一直试图摆脱边界,但我无法做到。 applet只包含一个Icon
的按钮。这是唯一的控件,我已将按钮的border
属性设置为EmptyBorder
这是在浏览器中查看按钮时的屏幕截图。
注意屏幕截图中的 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
答案 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
,你的代码就可以了。
这是我最终看到的截图:
我没有费心去调整JLabel
解决方案的布局和颜色,所以看起来并不好看,但你可以看到第二个或者没有边框。第三个小程序。
更多参考文献:The Swing source code(看看JButton
和AbstractButton
;他们做了很多你不需要的工作),Border with rounded corners & transparency ,和Java rounded corners on JFrame?