我正在尝试添加一个图像到一个JButton,这样用户就可以通过JButton的透明部分看到png表面并单击动画。
下面是该按钮的代码:
grid.add(new JPanel(){{
setLayout(new BorderLayout());
add(new JButton() {{
setLayout(new BorderLayout());
setBorder(new EmptyBorder(0, 0, 0, 0));
add(new JImageComponent(new ImageIcon(this.getClass().getResource("/Center.png"))));
}});
}});
JImageComponent是我自己拼凑出来的swing图像组件。下面是它的代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class JImageComponent extends JPanel {
Image image;
public JImageComponent(ImageIcon img) {
BufferedImage imgs;
setBorder(BorderFactory.createLineBorder(Color.black));
setPreferredSize(new Dimension(1000, 1000));
image = img.getImage();
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//Container parent = getParent();
Image scaledImage = image.getScaledInstance(getWidth(), getHeight(), Image.SCALE_DEFAULT);
MediaTracker tracker = new MediaTracker(new java.awt.Container());
tracker.addImage(scaledImage, 0);
try {
tracker.waitForAll();
} catch (InterruptedException ex) {
throw new RuntimeException("Image loading interrupted", ex);
}
g.drawImage(scaledImage, 0, 0, this);
}
}
结果如下所示:
我想让JButton的“金属”蓝色穿过中央排最左边的黑色正方形的中心。
这有可能吗?
发布于 2018-07-27 09:17:07
在JImageComponent上调用setOpaque(false)
。
默认情况下,Swing会看到您在按钮上呈现,因此它跳过绘制按钮。设置opaque false会告诉Swing您正在绘制的内容不是不透明的,并且它不能跳过渲染它后面的对象。
https://stackoverflow.com/questions/51549364
复制相似问题