Отключить рамку фокусировки JButton - PullRequest
29 голосов
/ 20 февраля 2012

У меня проблема с 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

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

Ответы [ 5 ]

100 голосов
/ 20 февраля 2012

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

jButton1.setFocusPainted(false);
6 голосов
/ 24 сентября 2015

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

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

2 голосов
/ 02 февраля 2016

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

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

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

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

0 голосов
/ 20 февраля 2012

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

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

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