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