Подтвердить что ты не робот

Отключить границу фокусировки JButton

У меня проблема с JButton в Java, в основном я хочу отключить границу кнопки (кнопка добавлена ​​в 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

Итак, как я могу установить кнопку так, чтобы, когда я не перемещаю мышь вокруг области кнопки, она доходит до первого изображения, но когда я перемещаю мышь, есть квадратная кнопка вокруг (с голубым фон)?

4b9b3361

Ответ 1

Это не граница. Это фокус. Вы можете удалить его, используя:

jButton1.setFocusPainted(false);

Ответ 2

Это может быть старый поток, но я решил button.setFocusable(false)

надеюсь, что это поможет тем, кто все еще ищет какой-то ответ. веселит.

Ответ 3

Я не думаю, что делать это с помощью обычного JButton - хорошая идея. Если ничего не произойдет, он не будет отображаться на разных платформах (Mac и Linux), если вы планируете отображать эту кнопку на разных платформах. Для всех практических целей button.setFocusPainted(false); следует позаботиться о вашем текущем требовании.

Рассмотрите возможность использования расширенного JLabel с поведением типа кнопки (с прослушивателями действий), чтобы избежать различий в поведении.

Ответ 4

После копания я придумал лучшее решение. Это также общая ошибка пользовательского интерфейса в приложениях GTK в Windows, одна из которых - GIMP. Это очень меня раздражает, поэтому я хочу найти лучшее исправление для глобального исправления, чем вручную установить его на каждый элемент управления.

Обходной путь устанавливает цвет для фокусировки на все общие элементы управления, которые он не должен воспринимать как прозрачные. Я пошел и протестировал экстенсивно с Windows Forms в Visual Studio. Кнопки панели инструментов и ToggleButtons никогда не должны иметь пунктирной границы даже при фокусировке. Панели инструментов должны быть установленыFocusable (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)));

Ответ 5

посмотрите, поможет ли это вам Удалить границу

или, может быть, это

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