Comment définir une couleur d'arrière-plan d'un JButton en Java?
-
21-09-2019 - |
Question
Je développe une application Java Desktop. J'y ai 4 JButtons
sur un JPanel
. Maintenant, je veux que chaque fois qu'un bouton est cliqué sa couleur d'arrière-plan d'une autre couleur (disons orange) pour représenter qu'il a été cliqué et la couleur d'arrière-plan de tous les autres 3 boutons reset à leur couleur par défaut (en cas aucun d'entre eux avait d'Orange couleur de fond).
Alors, à un moment donné qu'un seul bouton peut avoir la couleur orange.
L'approche actuelle que j'ai appliqué est que je l'ai mis en œuvre le code suivant dans la méthode xxxActionPerformed()
de DButton button1
button1.setBackground(Color.Orange);
button2.setBackground(Color.Gray);
button3.setBackground(Color.Gray);
button4.setBackground(Color.Gray);
et de même pour les trois boutons de repos.
Maintenant en réel, je ne veux pas la couleur ANTÉCÉDENTS le gris (pour le bouton déclipsée). Au lieu de cela, je veux la couleur de fond par défaut de sorte que la couleur backgroud s'ajuste automatiquement à l'aspect et la convivialité de l'interface graphique selon look-and-feel de la plate-forme de l'utilisateur final.
Q1. Comment puis-je obtenir la couleur d'arrière-plan par défaut?
Q2. Est-ce la bonne approche pour faire ceci ou est-il un autre mécanisme par lequel je peux regrouper tous les quatre boutons dans un groupe de boutons de sorte que seul on peut avoir la propriété spécifiée à un moment donné (comme des boutons radio)?
La solution
-
il suffit d'utiliser
null
d'utiliser la couleur par défaut:button1.setBackground(Color.ORANGE); button2.setBackground(null); ...
-
envisager d'utiliser JToggleButtons avec un ButtonGroup, définir l'icône et PressedIcon des boutons. Pas besoin de changer la couleur de fond.
button1 = new JToggleButton(new ImageIcon("0.jpg")); button1.setSelectedIcon(new ImageIcon("1.jpg")); button2 = new JToggleButton(new ImageIcon("0.jpg")); button2.setSelectedIcon(new ImageIcon("2.jpg")); ... ButtonGroup group = new ButtonGroup(); group.add(button1); group.add(button2); ...
Autres conseils
Vous pouvez obtenir la couleur de fond standard pour les boutons de la UIManager:
button1.setBackground(UIManager.getColor("Button.background"));
Pour autant que je sache, les touches peuvent changer dans look différent et se sent. Voici une belle application webstart qui montre toutes les clés disponibles:
http://tips4java.wordpress.com/2008/10/09 / UIManager-defaults /
Voici une section de "Button.background" basée sur cette exemple :
*** Metal javax.swing.plaf.metal.MetalLookAndFeel 636 entries Button.background: javax.swing.plaf.ColorUIResource[r=238,g=238,b=238] *** Nimbus com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel 1052 entries Button.background: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel$NimbusProperty@60961dff *** CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel 550 entries Button.background: javax.swing.plaf.ColorUIResource[r=174,g=178,b=195] *** Mac OS X com.apple.laf.AquaLookAndFeel 705 entries Button.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238]
Q1 .: Pour obtenir la couleur de l'interface graphique du bouton, il suffit de ce
button1.setBackground(Color.Orange);
button2.setBackground(java.awt.SystemColor.control);
button3.setBackground(java.awt.SystemColor.control);
button4.setBackground(java.awt.SystemColor.control);
Avec cette classe (java.awt.SystemColor. *), Vous pouvez obtenir la couleur de tous les éléments de l'interface utilisateur.
Q2 .: Je ne l'ai jamais entendu parler des boutons de regroupement. Alors, je ne peux pas vous répondre à cette question.
it helps.
Si vous le souhaitez, vous pouvez remodeler votre bouton d'interface utilisateur tout
public class buttonUI extends javax.swing.plaf.basic.BasicButtonUI{
buttonUI(JButton b){
b.setContentAreaFilled(false);
}
@Override
public void paint(Graphics g,JComponent c){
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
AbstractButton b = (AbstractButton) c;
g2d.setFont(font.deriveFont(11f));
Dimension d = b.getSize();
FontMetrics fm = g2d.getFontMetrics();
g2d.setColor(new Color(100,100,100));
String caption = b.getText();
int x = (d.width - fm.stringWidth(caption)) / 2;
int y = (d.height + fm.getAscent()) / 2 - 2;
g2d.drawString(caption, x, y);
} }
et dans votre pièce principale d'utilisation de code comme
jButton1.setUI(new buttonUI(jButton1));
Ce que je l'utilise .. vous pouvez avoir aussi votre façon
avez-vous regardé dans le motif de décorateur en java vous passez un bouton dans une méthode qui décore selon que le bouton est celui qui est actif en cours, par exemple si elle planait au-dessus.
public Jbutton decorateButton(JButton b, boolean isHoveredOver){
if(isHoveredOver)
b.setBackground(getContentPane().getBackground().GREEN);
return b;
}
vous appelez cette méthode de la MouseEvent ou des méthodes de actionEvent et émettez juste repeindre () après. mettre tous vos boutons dans un tableau ou un vecteur et une boucle à travers elle passe chacun dans la méthode decorateButton et donner la valeur booléenne initail de faux alors sur l'événement mis à true. De cette façon, la valeur initiale est par défaut et le bouton est alors décoré sur l'action des boutons semblent agir dans le cadre d'un groupe