我正在用Java构建一个用于实习的显示API。在单个图像中加载有效,但只要我想添加另一个图像,第一个图像就会消失,只会绘制第二个图像。有想法该怎么解决这个吗?
主要班级:
package com.lespaul.display;
import java.awt.Graphics;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class Window extends JFrame {
private static final long serialVersionUID = 3716315131567381715L;
public Window() {
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setSize(200, 200);
this.setVisible(true);
Image pane = new Image("floor.png");
Image pane2 = new Image("floor.png");
this.add(pane);
this.add(pane2);
pane2.setPosition(50,50);
this.revalidate();
}
public static void main(String[] args){
Window window = new Window();
}
}
这是实际的形象......
package com.lespaul.display;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.io.IOException;
import java.net.URL;
import com.lespaul.position.*;
public class Image extends JPanel {
private static final long serialVersionUID = -5815516814733234713L;
public BufferedImage image;
public Vector2 position = new Vector2(0, 0);
public Image() {
}
public Image(String ref){
try {
this.addImage(ref);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setPosition(int x, int y){
Dimension size = this.getPreferredSize();
Insets insets = this.getInsets();
this.setBounds(x+insets.left,y+insets.top,size.width,size.height);
this.position.x = x;
this.position.y = y;
repaint();
}
public void addImage(String fileName) throws IOException {
URL url = this.getClass().getClassLoader().getResource(fileName);
image = ImageIO.read(url);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null)
g.drawImage(image,(int)position.x,(int)position.y, null);
}
}
答案 0 :(得分:2)
不要给你的班级打电话。该名称有一个Java接口,使您的代码混乱。
如果要在不同位置绘制多个图像,则常见的解决方案是跟踪ArrayList中的图像,然后创建一个循环通过ArrayList的自定义组件,以在指定位置绘制图像。
查看Custom Painting Approaches以获取示例。 DrawOnComponent
示例将让您了解如何实现此方法。
答案 1 :(得分:0)
使用任何布局,例如
jFrame.getContentPane().add(jPanel1,BorderLayout.NORTH);
jFrame.getContentPane().add(jPanel2,BorderLayout.SOUTH);
答案 2 :(得分:-1)
最佳做法是使用layouts来管理组件位置。
祝你好运!