How to set hover effect on jbutton?

I am trying to create a Java Desktop application in which I use two buttons. I want to add a hover effect to these buttons. I want: when I press any button, it should change the background color.

How can i achieve this?

Here is my 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
source share
3 answers

You can use moused Entered and Exited JButton and do what you want.

Example:

 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
source

I once wrote a custom JButton that I used to change the level of transparency when the mouse hovered over it through animation. Here is the code for this button:

 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(); } } } 

And here's a quick demo of 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(); } }); } } 

It's good that you can tweak the code to change the background color of the button, as well as in an animated way.

+1
source

Wow. An old question, I know, but ...

To change the background, use:

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

in actionListener.

For the rollover effect, you can use:

 b1.setRolloverEnabled(true); 

but you will need to put icons for your buttons to switch between them.

Otherwise, for other freezing effects you need to use mouseListener.

0
source

All Articles