'How to put Hover effect on jbutton?
I am trying to create a Java Desktop application where I am using two buttons. I want to add hover effect in those buttons. I want: When I click any button it should change its background color.
How can I achieve it?
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");
}
});
}
}
Solution 1:[1]
You can use moused Entered
and Exited
the JButton
, and do what ever you want.
For 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"));
}
});
Solution 2:[2]
I once wrote a custom JButton which used to change its transparency level when the mouse was hovered over it through animation. Here's the code for that 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 demonstration of the 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();
}
});
}
}
Good thing is that you can tweak the code to change the background color of the button as well, and that too, in an animated way.
Solution 3:[3]
Wow. Old question, I know, but...
To change the background, use:
b1.setBackground(new java.awt.Color(r, g, b));
in the actionListener.
For a rollover effect, you can use:
b1.setRolloverEnabled(true);
but you will need to supply icons for your buttons to flip between.
Otherwise, for other hover effects, you do need to use a mouseListener.
Solution 4:[4]
@Salah's answer didn't work for me at first, but it did after I disabled my button's rollover effect using
button1.setRolloverEnabled(false);
The rollover effect was automatically setting my button's hover color, which was overriding the color I set in mouseEntered()
.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Salah |
Solution 2 | Aman Agnihotri |
Solution 3 | Kevin Donaldson |
Solution 4 | Jasper |