Отключить рамку фокуса 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//

Это может позволить границе исчезнуть, как на этом изображении:

Но когда моя кнопка нажата (не перемещена) в кнопку, вокруг кнопки появляется "точечная" граница, например:

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

6 ответов

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

jButton1.setFocusPainted(false);

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

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

После копания я придумал лучшее решение. Это также распространенная ошибка пользовательского интерфейса в приложениях 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)));

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

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

      JButton button = new JButton();
button.setFocusPainted(false); //To don't paint borders while 
                              //JButton is in focus.

button.setBorderPainted(false);//To don't paint JButton's borders.

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

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

Border emptyBorder = BorderFactory.createEmptyBorder();
yourButton.setBorder(emptyBorder);
Другие вопросы по тегам