我使用图像作为背景,然后我有另一个图像作为JButton。背景图像当前与按钮重叠,因此您无法看到它。当我评论repaint()时,按钮就在前面,但是因为我重新找到按钮,该空间会从背景图像中淡出。所以基本上,我必须用我的代码将按钮放在背景图像前面(背景图像仍然完好无损)?
public class Start extends JFrame {
JPanel jp = new JPanel();
JButton startButton = new JButton();
private Image dbImage;
private Graphics dbg;
Image backgroundFirst;
int backx;
int backy;
public Start() {
ImageIcon i = new ImageIcon(
"C:/Users/Mel/workspace/camptycoon/javagame/src/javagame/background1.png");
backgroundFirst = i.getImage();
startButton
.setIcon(new ImageIcon(
"C:/Users/Mel/workspace/camptycoon/javagame/src/javagame/start.png"));
jp.add(startButton);
startButton.setLayout(getLayout());
add(jp);
validate();
// Frame Properties
setTitle("Counselor Training");
setVisible(true);
setSize(755, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public LayoutManager getLayout() {
int x = 540;
int y = 475;
startButton.setLocation(x, y);
startButton.setBorder(null);
return null;
}
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g) {
backx = 10;
backy = 30;
g.setColor(Color.BLUE);
g.drawImage(backgroundFirst, backx, backy, this);
//repaint();
}
}
答案 0 :(得分:3)
我知道一些常用的解决方案:
paintComponent(...)
方法绘制图像。附加说明:
@Override
注释,因为你可能会惊讶地发现事实上并非如此(即你的`paintComponent(...)上述方法)。 paint(...)
方法,因为它可能没有按照您的想法进行操作,并且您有可能产生不必要的副作用。paint(...)
方法是个好主意。getLayout()
方法覆盖看起来很狡猾。不要这样做。setOpaque(false)
将上层JPanel(或其他组件)设置为非透明。