Java 禁用JButton焦点边框

Java 禁用JButton焦点边框,java,swing,jbutton,Java,Swing,Jbutton,我对Java中的JButton有一个问题。基本上,我想禁用按钮的边框(按钮被添加到JDesktopPane) 这是我的密码: JButton j = new JButton("BUTTON"); j.setIcon(icon1); //icon1 : icon// j.setFocusable(true); j.setContentAreaFilled(false); j.setBounds(90, 20, 130, 30); dtp.add(j); //dtp : JDesktop

我对Java中的JButton有一个问题。基本上,我想禁用按钮的边框(按钮被添加到JDesktopPane)

这是我的密码:

 JButton j = new JButton("BUTTON");
 j.setIcon(icon1); //icon1 : icon//
 j.setFocusable(true);
 j.setContentAreaFilled(false);
 j.setBounds(90, 20, 130, 30);
 dtp.add(j); //dtp : JDesktopPane//
它可以让边界消失,如下图所示:

但是当我的鼠标被点击(而不是移动)到按钮中时,按钮周围有一个“点”边框,如下所示:


那么,我如何设置按钮,当我不在按钮区域移动鼠标时,它仍然像第一幅图像一样设置,但当我移动鼠标时,按钮周围有一个正方形(浅蓝色背景)?

看看这是否能帮到你

或者这个

Border emptyBorder = BorderFactory.createEmptyBorder();
yourButton.setBorder(emptyBorder);

这不是边界。这是焦点。您可以使用以下方法将其删除:

jButton1.setFocusPainted(false);

我不认为用常规的
JButton
来做这件事是个好主意。如果没有,它将不会在不同的平台(Mac和Linux)上显示类似的内容,以防您计划在不同的平台上显示此按钮。 对于所有实际用途
按钮。设置焦点已绘制(假)应满足您当前的需求


考虑使用扩展的
JLabel
和类似按钮的行为(使用动作侦听器)来避免行为差异。

这可能是旧线程,但我用
按钮。设置可聚焦(假)

希望这对那些仍在寻找答案的人有所帮助。
干杯。

挖掘之后,我想出了一个更好的解决方案。这也是Windows上GTK应用程序中常见的UI错误,其中之一就是GIMP。这让我非常恼火,所以我想找到一个比手动设置每个控件更好的全局修复

该解决方法将焦点的颜色设置为所有不应该出现的公共控件的透明颜色。我在VisualStudio中使用Windows窗体进行了广泛的测试。工具栏按钮和切换按钮即使在聚焦时也不应该有虚线边框。工具栏应该是可设置焦点的(false);默认情况下,与在Windows中一样。每个其他控件都应该有点边框,就像在Swing中一样,但只有在焦点循环时

        // Removes the dotted border around controls which is not consistent with Windows
        UIManager.put("Button.focus", new ColorUIResource(new Color(0, 0, 0, 0)));
        UIManager.put("ToggleButton.focus", new ColorUIResource(new Color(0, 0, 0, 0)));

        // ways to remove it from other controls...
        UIManager.put("CheckBox.focus", new ColorUIResource(new Color(0, 0, 0, 0)));
        UIManager.put("TabbedPane.focus", new ColorUIResource(new Color(0, 0, 0, 0)));
        UIManager.put("RadioButton.focus", new ColorUIResource(new Color(0, 0, 0, 0)));
        UIManager.put("Slider.focus", new ColorUIResource(new Color(0, 0, 0, 0)));

        // figure out combobox
        UIManager.put("ComboBox.focus", new ColorUIResource(new Color(0, 0, 0, 0)));

当我设置“Border emptyBorder=BorderFactory.createEmptyBorder();yourButton.setBorder(emptyBorder)”;它给了我一个正常的按钮,但没有任何效果。“让边框像这样消失”看起来很不直观。你还做了什么来迷惑可怜的最终用户呢?那么,在这种情况下,你认为哪个词最好?顺便说一句,英语不是我的第一语言。我指的是无边界按钮是“非直觉的”,而不是你写的。你写的很清楚。抱歉给你添麻烦了。正是我要找的。谢谢此解决方案不适用于ButtonGroup和JRadioButton@david没问题!:)重要的是要注意,这是仅适用于工具栏的正确默认行为。在带有Windows窗体的Visual Studio中,ToolStrip的TabStop默认设置为false。使用上面的“我的UI修复程序”可以去除工具栏按钮和切换按钮上的虚线边框,这些按钮在有焦点或无焦点的窗口中都不会出现。