我正在尝试在另一张图像上显示几张图像。 对我来说,将这些图片放在两个不同的类中很重要,因为我需要将这些图像与其他属性连接起来。 我编写了一个类,一次添加并显示一张图片。
import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Obrazek {
BufferedImage image;
Obrazek(){
File imageFile = new File("tło.jpg");
try {
image = ImageIO.read(imageFile);
} catch (IOException e) {
System.err.println("Blad odczytu obrazka");
e.printStackTrace();
}
}
JPanel pane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
};
}
假设我有两个这样的类,每个类都有不同的图像。 然后我用 main 方法编写了我的主类,它定义框架并创建图像。
import java.awt.*;
import javax.swing.*;
public class ButtonDemo{
public static void main(String[] args) {
JFrame frame = buildFrame();
Obrazek obraz = new Obrazek();
frame.add(obraz.pane);
}
private static JFrame buildFrame() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
return frame;
}
}
但是当我添加下一帧时。add(someobject.pane);它删除前一张并仅显示最后一张。如何让它们一起显示,但来自两个不同的类。
最佳答案
"It's important for me to have this pictures in two diffrent classes becous i need to connect this images with the other properties"
您可能会错误地处理这个问题,试图将这些类中的每一个都设为 JPanel
。我的意思是,从技术上讲,您可以使用 JLayeredPane
来实现这一点。但我会采取不同的方式。
首先要处理您的“其他属性”,您可以使用界面
来组合您想要绘制的对象。只需在界面中定义一个draw
方法即可。
public interface Drawable {
void draw(Graphics g);
}
然后你就可以有一个主面板来进行绘图了。该面板将保存 Drawable
对象的 List
或 Map
;如果添加后的访问并不重要,则使用 List
;如果添加后需要轻松访问它们,则使用 Map
。例如。
public class DrawingPanel extends JPanel {
List<Drawable> drawList;
// Map<String, Drawable> drawMap;
public void addToDrawList(Drawable drawable) {
drawList.add(drawable);
repaint();
}
// public void addToDrawMap(String key, Drawable drawable) {
// drawMap.put(key, drawable);
// repaint();
// }
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for(Drawable drawable : drawList){
drawable.draw(g);
}
// for (Drawable drawable : drawMap.values()) {
// drawable.draw(g);
// }
}
}
现在,您可以将任何您想要的类实现 Drawable
,然后将该类的实例添加到 drawList
或 drawMap
中。这样所有的东西都被绘制到同一个表面上。例如
class HelloDrawable implements Drawable {
@Override
public void draw(Graphics g) {
g.drawString("Hello", 100, 100);
}
}
class WorldDrawable implements Drawable {
@Override
public void draw(Graphics g) {
g.drawString("World", 150, 100);
}
}
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
DrawingPanel panel = new DrawingPanel();
panel.addToDrawList(new HelloDrawable());
panel.addToDrawList(new WorldDrawable());
// panel.addToDrawMap("Hello", new HelloDrawable());
}
}
关于java - 两张图片,一张在 Java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244430/