Отображение изображения поверх изображения Java - PullRequest
0 голосов
/ 22 ноября 2018

Как отобразить изображение поверх другого изображения в апплете или jframe?

Я знаю, что для одного изображения в апплете это:

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);

Так как мне добавить изображение поверх другого для любого из них?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Как уже упоминалось в комментариях, (Java) апплеты действительно мертвы и их не стоит преследовать.ImagePanel в этом ответе расширяет JPanel и теоретически может отображаться в любом контейнере верхнего уровня на основе Java Swing (например, JFrame, JWindow, JOptionPane ..) или в другом контейнере, таком как JPanel.

enter image description here

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);
    }
}
0 голосов
/ 22 ноября 2018

Как отмечают люди в комментариях, апплеты мертвы, вам на самом деле они не нужны для изучения программ с графическим интерфейсом.

Но, тем не менее, если вы хотите, есть несколько способов сделать это, например, использовать drawImage() метод.Может быть, что-то вроде этого:

try
{
    BufferedImage background = ImageIO.read(new File("..."));
    BufferedImage logo = ImageIO.read(new File("..."));

    Graphics g = background.getGraphics();
    g.drawImage(logo, 0, 0, null);
}
catch (Exception e)
{
    e.printStackTrace();
}
...