gpt4 book ai didi

java - 鼠标悬停时背景图像发生变化的 JButton

转载 作者:搜寻专家 更新时间:2023-11-01 02:27:24 24 4
gpt4 key购买 nike

我正在尝试显示一个带有图像的 JButton,但我不知道如何让 Mousehover 对此起作用。图像的正常显示是有效的,艰难的。另外,如果按钮上绘制的文本可以居中,那就太好了。

import java.awt.*;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;

public class ImageButtonTest {

private static JButton imageButton;

public static void main(String[] args) throws IOException {
JFrame frm = new JFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(90, 27);
frm.setLocation(50, 50);
Image image = ImageIO.read(new URL("http://i.imgur.com/bitgM6l.png"));
Image imageHover = ImageIO.read(new URL("http://i.imgur.com/dt81BWk.png"));
imageButton = new ImageButton(image, imageHover);
imageButton.setText("Download");
frm.add(imageButton);
frm.pack();
frm.setVisible(true);
}

static class ImageButton extends JButton {
private Image image, imageHover;
private boolean hover;

ImageButton(Image image, Image imageHover) {
this.image = image;
this.hover = false;


addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseEntered(java.awt.event.MouseEvent evt) {
hover = true;
repaint();
}

@Override
public void mouseExited(java.awt.event.MouseEvent evt) {
hover = false;
repaint();
}
});
};

@Override
protected void paintComponent(Graphics g) {

if(isEnabled()) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setFont(new Font("Arial", Font.PLAIN, 12));
g2.setColor(Color.WHITE);

if(hover) {
g2.drawImage(imageHover, 0, 0, getWidth(), getHeight(), this);
} else {
g2.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
g2.drawString(getText(), 20, getHeight() / 2 + 5);

g2.dispose();
} else {
super.paintComponent(g);
}

}

}

}

最佳答案

Image image = ImageIO.read(new URL("http://i.imgur.com/bitgM6l.png")); Image imageHover = ImageIO.read(new URL("http://i.imgur.com/dt81BWk.png"));

您可以使用在

中实现的标准方法

JButton API

//button.setBorderPainted(false);
//button.setBorder(null);
//button.setFocusable(false);
//button.setMargin(new Insets(0, 0, 0, 0));
button.setContentAreaFilled(false);
button.setIcon(icon());
button.setRolloverIcon(iconA());
button.setPressedIcon(iconB());
button.setDisabledIcon(iconC());

JButton.getModel().addChangeListener()

    JButton.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
if (model.isRollover()) {
button.setIcon(icon());
} else {
button.setIcon(iconA());
} etc ...// if (model.isPressed()) {
}
});

关于java - 鼠标悬停时背景图像发生变化的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18574375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com