я однажды написал обычай JButton, который используется для изменения его уровня прозрачности, когда мышь завис над ней с помощью анимации. Вот код для этой кнопки:
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();
}
}
}
А вот быстрый демонстрация 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();
}
});
}
}
Хорошая вещь, что вы можете изменить код, чтобы изменить цвет фона кнопки, а также, и это тоже, анимированным образом.
@peeskillet может рассказать мне, как я могу сделать jbutton как закругленный rectangel – user3456343
Честно говоря, я бы просто посмотрел на меняющийся внешний вид. Мне не нравится возиться с внешним видом. См. [Этот пост] (http://stackoverflow.com/a/22166047/2587435) и см. [Изменение внешнего вида и ощущения] (http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/index. html) –
все попытки прослушивателя мыши ошибочны, с побочным эффектом, чтобы игнорировать эти ответы – mKorbel