gpt4 book ai didi

java - 两张图片,一张在 Java 中

转载 作者:行者123 更新时间:2023-12-02 05:23:54 26 4
gpt4 key购买 nike

我正在尝试在另一张图像上显示几张图像。对我来说,将这些图片放在两个不同的类中很重要,因为我需要将这些图像与其他属性连接起来。我编写了一个类,一次添加并显示一张图片。

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 对象的 ListMap;如果添加后的访问并不重要,则使用 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,然后将该类的实例添加到 drawListdrawMap 中。这样所有的东西都被绘制到同一个表面上。例如

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/

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