web-dev-qa-db-fra.com

Désactiver la bordure de focus JButton

J'ai un problème avec JButton en Java. En gros, je veux désactiver la bordure du bouton (le bouton est ajouté à JDesktopPane). 

Voici mon code:

 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//

Cela pourrait laisser la bordure disparaître comme dans cette image:

enter image description here

Mais quand ma souris est cliquée (pas déplacée) dans le bouton, il y a une bordure "point" autour du bouton, comme ceci:

enter image description here

Alors, comment pourrais-je régler le bouton de sorte que, lorsque je ne déplace pas la souris autour de la zone du bouton, il reste comme pour la première image, mais lorsque je déplace la souris, il y a un carré autour du bouton (avec une lumière- fond bleu)?

28
Cocc Cocc

Ce n'est pas frontière. C'est le focus. Vous pouvez l'enlever en utilisant:

jButton1.setFocusPainted(false);
98
zari

C'est peut-être un vieux fil, mais j'ai résolu le mien avec button.setFocusable(false) 

j'espère que cela aidera pour ceux qui cherchent encore une réponse . Bravo.

5
ralphgabb

Après avoir creusé, j'ai trouvé une meilleure solution. Il s’agit également d’un bogue d’interface utilisateur courant dans les applications GTK sous Windows, l’un d’eux étant GIMP. Cela me déplaît énormément et je voulais donc trouver un correctif global plus efficace que de le définir manuellement sur chaque contrôle.

La solution de contournement définit la couleur pour le focus sur tous les contrôles communs qui ne sont pas censés se produire sur transparent. Je suis allé et testé intensivement avec Windows Forms dans Visual Studio. Les boutons de la barre d’outils et les boutons Toggle ne doivent jamais avoir la bordure en pointillé, même une fois le focus activé. Les barres d'outils sont supposées être définiesFocusable (false); par défaut comme ils sont sous Windows. Tous les autres contrôles doivent avoir la bordure en pointillés comme dans Swing, mais uniquement lorsque la mise au point est effectuée.

        // 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)));
2
Goombert

Je ne pense pas que faire ceci avec JButton habituel soit une bonne idée. Dans le cas contraire, il ne s'affichera pas de manière similaire sur différentes plates-formes (Mac et Linux) si vous envisagez d'afficher ce bouton sur différentes plates-formes . Pour des raisons pratiques, button.setFocusPainted(false); devrait prendre en compte votre besoin actuel.

Pensez à utiliser une JLabel étendue avec un comportement semblable à un bouton (avec des écouteurs d'action) pour éviter les différences de comportement.

1
ring bearer

voir si cela peut vous aider Supprimer la bordure

ou peut-être cela

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