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:
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:
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)?
Ce n'est pas frontière. C'est le focus. Vous pouvez l'enlever en utilisant:
jButton1.setFocusPainted(false);
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.
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)));
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.
voir si cela peut vous aider Supprimer la bordure
ou peut-être cela
Border emptyBorder = BorderFactory.createEmptyBorder();
yourButton.setBorder(emptyBorder);