禁用JButton焦点边框

时间:2012-02-20 13:09:26

标签: 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 : JDesktopPane//

它可以让边框像这张图片一样消失:

enter image description here

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

enter image description here

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

5 个答案:

答案 0 :(得分:100)

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

jButton1.setFocusPainted(false);

答案 1 :(得分:6)

这可能是旧线程,但我解决了我的问题 button.setFocusable(false)

希望对那些仍在寻找答案的人有所帮助。 欢呼声。

答案 2 :(得分:2)

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

该变通方法将焦点的颜色设置为它不应该透明的所有常见控件。我在Visual Studio中使用Windows窗体进行了大量测试。工具栏按钮和ToggleButtons即使在聚焦时也不应具有虚线边框。工具栏应该是setFocusable(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)));

答案 3 :(得分:1)

我不认为通常JButton这样做是个好主意。如果没有,如果您计划在不同平台上显示此按钮,它将在不同平台(Mac和Linux)中显示不相似。 出于所有实际目的,button.setFocusPainted(false);应该照顾您当前的要求。

考虑使用带有按钮的扩展JLabel行为(使用动作侦听器)以避免行为差异。

答案 4 :(得分:0)

看看这是否可以帮助你Remove border

或者这个

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