在图像Java上显示图像

在图像Java上显示图像,java,image,jframe,applet,Java,Image,Jframe,Applet,如何在applet或jframe上的另一个图像上显示图像 我知道applet中的一个图像是: Image Bendy; Bendy = getImage(getDocumentBase(), "Bendy Icon.PNG"); g.drawImage(Bendy, 20, 20, this); 对于jframe: ImageIcon kh = new ImageIcon("KH3.gif"); JLabel lab = new JLabel(kh); add(lab); 那么,我如何为其中

如何在applet或jframe上的另一个图像上显示图像

我知道applet中的一个图像是:

Image Bendy;
Bendy = getImage(getDocumentBase(), "Bendy Icon.PNG");
g.drawImage(Bendy, 20, 20, this);
对于jframe:

ImageIcon kh = new ImageIcon("KH3.gif");
JLabel lab = new JLabel(kh);
add(lab);

那么,我如何为其中一个添加一个图像而不是另一个呢?

正如人们在评论中所说,小程序已经过时了,你实际上不需要它们来学习GUI程序

但是,如果您愿意,仍然有一些方法可以做到这一点,比如使用
drawImage()
方法。也许是这样的:

试试看
{
BuffereImage background=ImageIO.read(新文件(“…”);
BuffereImage徽标=ImageIO.read(新文件(“…”);
Graphics g=background.getGraphics();
g、 drawImage(徽标,0,0,空);
}
捕获(例外e)
{
e、 printStackTrace();
}
正如评论中提到的,(Java)小程序确实已经死了,不值得追求。这个答案中的
ImagePanel
扩展了
JPanel
,理论上可以显示在任何基于Java Swing的顶级容器中(例如
JFrame
JWindow
JOptionPane
)或另一个容器中,如
JPanel

import java.awt.*;
导入java.awt.image.*;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
导入java.util.Random;
导入javax.imageio.imageio;
导入java.net.URL;
公共类堆栈图像{
私有JComponent ui=null;
字符串路径1=”https://i.stack.imgur.com/F0JHK.png";
字符串路径2=”https://i.stack.imgur.com/gJmeJ.png";
类ImagePanel扩展了JPanel{
私有最终缓冲区映像[]映像;
私有最终随机兰德=新随机();
专用最终尺寸预尺寸=新尺寸(400400);
图像面板(BuffereImage[]图像){
这个。图像=图像;
挫折地面(颜色:白色);
}
@凌驾
受保护组件(图形g){
超级组件(g);
对于(int ii=0;ii<200;ii++){
int x=rand.nextInt(predesize.width);
int y=随机数nextInt(预设计高度);
int ind=rand.nextInt(images.length);
g、 drawImage(图像[ind],x,y,this);
}
}
@凌驾
公共维度getPreferredSize(){
返回预搜索;
}
}
StackedImages(){
试一试{
initUI();
}捕获(例外情况除外){
例如printStackTrace();
}
}
public final void initUI()引发异常{
如果(ui!=null){
返回;
}
ui=新的JPanel(新的BorderLayout(4,4));
ui.setboorder(新的空订单(4,4,4,4));
BuffereImage[]bi=新的BuffereImage[2];
bi[0]=ImageIO.read(新URL(路径1));
bi[1]=ImageIO.read(新URL(路径2));
添加(新的ImagePanel(bi));
}
公共JComponent getUI(){
返回用户界面;
}
公共静态void main(字符串[]args){
可运行r=()->{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}捕获(异常使用默认值){
}
StackedImages o=新的StackedImages();
JFrame f=新的JFrame(o.getClass().getSimpleName());
f、 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f、 setLocationByPlatform(真);
f、 setContentPane(o.getUI());
f、 包装();
f、 setMinimumSize(f.getSize());
f、 setVisible(真);
};
SwingUtilities.invokeLater(r);
}
}

;简而言之,Applet已经死了,HTML5万岁。。。或者通过覆盖
JPanel
paintComponent()
方法进行自定义绘制。有关更多信息和工作示例,请阅读上的Swing教程部分。然后你可以使用
Graphics.drawImage(…)
方法。嘿@DigiLei,我的回答帮你解决问题了吗?有点。我把它们按这样的顺序堆叠起来:pan.add(kh3);pan.add(kh2);如果放置正确,它会将一个图像打印到另一个图像上。1)buffereImage background=ImageIO.read(新文件(“…”)应用程序中使用的大多数图像。是嵌入式资源,必须通过URL加载,但在构建类时只加载一次,因为运行时可能随时调用通常的绘制机制。2)
Graphics g=background.getGraphics()这不是进行自定义绘制的方法。有关正确的方法,请参见camickr的评论。3) 
g.drawImage(logo,0,0,null)
each
JComponent
是一个图像观察者。所以应该是
g.drawImage(logo,0,0,this)4)“可能是这样的:”除了。。完全不同。如果这有助于解决问题,请。
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.util.Random;
import javax.imageio.ImageIO;
import java.net.URL;

public class StackedImages {

    private JComponent ui = null;
    String path1 = "https://i.stack.imgur.com/F0JHK.png";
    String path2 = "https://i.stack.imgur.com/gJmeJ.png";

    class ImagePanel extends JPanel {

        private final BufferedImage[] images;
        private final Random rand = new Random();
        private final Dimension prefeSize = new Dimension(400, 400);

        ImagePanel(BufferedImage[] images) {
            this.images = images;
            setBackground(Color.WHITE);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            for (int ii = 0; ii < 200; ii++) {
                int x = rand.nextInt(prefeSize.width);
                int y = rand.nextInt(prefeSize.height);
                int ind = rand.nextInt(images.length);
                g.drawImage(images[ind], x, y, this);
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return prefeSize;
        }
    }

    StackedImages() {
        try {
            initUI();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public final void initUI() throws Exception {
        if (ui != null) {
            return;
        }

        ui = new JPanel(new BorderLayout(4, 4));
        ui.setBorder(new EmptyBorder(4, 4, 4, 4));

        BufferedImage[] bi = new BufferedImage[2];
        bi[0] = ImageIO.read(new URL(path1));
        bi[1] = ImageIO.read(new URL(path2));
        ui.add(new ImagePanel(bi));
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = () -> {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception useDefault) {
            }
            StackedImages o = new StackedImages();

            JFrame f = new JFrame(o.getClass().getSimpleName());
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setLocationByPlatform(true);

            f.setContentPane(o.getUI());
            f.pack();
            f.setMinimumSize(f.getSize());

            f.setVisible(true);
        };
        SwingUtilities.invokeLater(r);
    }
}