要实现将所有JButtons的默认鼠标按下背景颜色覆盖为其当前背景颜色的较深阴影,可以通过以下步骤来完成:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class ShadowButton extends JButton {
private static final Color SHADOW_COLOR = new Color(0, 0, 0, 50); // 阴影颜色,可根据需求调整透明度
public ShadowButton(String text) {
super(text);
setOpaque(false); // 设置按钮透明
setContentAreaFilled(false); // 设置按钮内容区域透明
setBorderPainted(false); // 取消按钮边框
setForeground(Color.WHITE); // 设置按钮前景色
setFocusPainted(false); // 取消按钮焦点样式
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
repaint(); // 鼠标按下时触发重绘
}
@Override
public void mouseReleased(MouseEvent e) {
repaint(); // 鼠标释放时触发重绘
}
});
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
if (getModel().isPressed()) {
// 绘制当前背景颜色的较深阴影
g2d.setColor(getBackground().darker());
g2d.fillRect(0, 0, getWidth(), getHeight());
} else {
// 绘制按钮默认状态
g2d.setColor(getBackground());
g2d.fillRect(0, 0, getWidth(), getHeight());
}
g2d.dispose();
}
}
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame {
public MyFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Shadow Button Demo");
setSize(400, 300);
setLocationRelativeTo(null);
// 创建一个面板
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
// 创建ShadowButton并添加到面板中
ShadowButton button1 = new ShadowButton("Button 1");
ShadowButton button2 = new ShadowButton("Button 2");
ShadowButton button3 = new ShadowButton("Button 3");
panel.add(button1);
panel.add(button2);
panel.add(button3);
// 将面板添加到窗口中
add(panel);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MyFrame frame = new MyFrame();
frame.setVisible(true);
});
}
}
这样,当鼠标按下按钮时,按钮的背景颜色会被覆盖为其当前背景颜色的较深阴影。你可以根据需要调整阴影颜色的透明度,也可以根据实际情况对ShadowButton进行进一步的定制和扩展。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云云数据库MySQL。
领取专属 10元无门槛券
手把手带您无忧上云