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)?

Était-ce utile?

La solution

  1. il suffit d'utiliser null d'utiliser la couleur par défaut:

    button1.setBackground(Color.ORANGE);
    button2.setBackground(null);
    ...
    
  2. 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top