web-dev-qa-db-fra.com

Comment mettre l'effet Hover sur jbutton?

J'essaie de créer une application Java Desktop sur laquelle j'utilise deux boutons. Je veux ajouter un effet de survol dans ces boutons. Je veux: quand je clique sur n’importe quel bouton, sa couleur d’arrière-plan devrait changer.

Comment puis-je y arriver?

Voici mon code:

public class Party1Party2 extends JFrame
{
    JButton b1;
    JButton b2;
    Container pane;

    public Party1Party2()
    {
        getContentPane().setBackground(new Java.awt.Color(255, 255, 255));

    b2.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent ae)
        {
            JOptionPane.showMessageDialog(frame, "Welcome to allhabad High Court");
        }
    });

    b1.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent ae)
        {
            JOptionPane.showMessageDialog(frame, "Welcome to allhabad High Court");

        }
    });
  }
}
6
user3456343

Vous pouvez utiliser la souris Entered et Exited la JButton et faire ce que vous voulez.

Par exemple:

jButton1.addMouseListener(new Java.awt.event.MouseAdapter() {
    public void mouseEntered(Java.awt.event.MouseEvent evt) {
        jButton1.setBackground(Color.GREEN);
    }

    public void mouseExited(Java.awt.event.MouseEvent evt) {
        jButton1.setBackground(UIManager.getColor("control"));
    }
});
13
Salah

Une fois, j'ai écrit un JButton personnalisé qui modifiait son niveau de transparence lorsque la souris la survolait par l'animation. Voici le code pour ce bouton:

import javax.swing.*;
import Java.awt.*;
import Java.awt.event.MouseAdapter;
import Java.awt.event.MouseEvent;

public class HoverButton extends JButton
{
  float alpha = 0.5f;

  public HoverButton(String text)
  {
    super(text);
    setFocusPainted(false);
    setBorderPainted(false);
    setContentAreaFilled(false);
    addMouseListener(new ML());
  }

  public float getAlpha()
  {
    return alpha;
  }

  public void setAlpha(float alpha)
  {
    this.alpha = alpha;
    repaint();
  }

  public void paintComponent(Java.awt.Graphics g)
  {
    Java.awt.Graphics2D g2 = (Java.awt.Graphics2D) g;
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
    super.paintComponent(g2);
  }

  public class ML extends MouseAdapter
  {
    public void mouseExited(MouseEvent me)
    {
      new Thread(new Runnable()
      {
        public void run()
        {
          for (float i = 1f; i >= .5f; i -= .03f)
          {
            setAlpha(i);
            try
            {
              Thread.sleep(10);
            }
            catch (Exception e)
            {
            }
          }
        }
      }).start();
    }

    public void mouseEntered(MouseEvent me)
    {
      new Thread(new Runnable()
      {
        public void run()
        {
          for (float i = .5f; i <= 1f; i += .03f)
          {
            setAlpha(i);
            try
            {
              Thread.sleep(10);
            }
            catch (Exception e)
            {
            }
          }
        }
      }).start();
    }

    public void mousePressed(MouseEvent me)
    {
      new Thread(new Runnable()
      {
        public void run()
        {
          for (float i = 1f; i >= 0.6f; i -= .1f)
          {
            setAlpha(i);
            try
            {
              Thread.sleep(1);
            }
            catch (Exception e)
            {
            }
          }
        }
      }).start();
    }
  }
}

Et voici une rapide démonstration de la HoverButton:

import javax.swing.*;
import Java.awt.*;

public class Demonstration
{
  public Demonstration()
  {
    JFrame frame = new JFrame("Hover Button Demonstration");
    frame.setLayout(new GridBagLayout());
    frame.add(new HoverButton("Hover Button!!"));

    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }

  public static void main(String args[])
  {
    SwingUtilities.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        new Demonstration();
      }
    });
  }
}

La bonne chose est que vous pouvez modifier le code pour modifier la couleur d'arrière-plan du bouton également, et cela également, de manière animée.

1
Aman Agnihotri

Sensationnel. Vieille question, je sais, mais ...

Pour changer le fond, utilisez:

b1.setBackground(new Java.awt.Color(r, g, b));

dans l'actionListener.

Pour un effet de roulement, vous pouvez utiliser:

b1.setRolloverEnabled(true);

mais vous devrez fournir des icônes pour que vos boutons basculent entre eux.

Sinon, pour d'autres effets de survol, vous devez utiliser un mouseListener.

0
Kevin Donaldson