如何从JFrame添加图片,附加到边框

MTo*_*MTo 9 java jframe

嗨,我想在我的JFrame边框添加一些图像.这是否可以将图片附加到JFrame的边框并将其创建为1个对象?

像这样的东西:

在此输入图像描述

Nic*_*aly 9

我不确定是否可以将图像直接添加到JFrame的边框(建议欢迎).我决定通过使用透明内容窗格来解决此问题,并使用内部框架像外框一样"显示".

代码非常简单,但是,如果您想要解释代码是如何工作的,请告诉我.

这是您启动和运行所需的最少代码.

您需要transparent-phone.png在类路径的根目录(即在PhoneWindow.java文件旁边的根程序包中)提供您自己的图像.

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;

public class PhoneWindow {

    public static void main(String[] args) {
        new PhoneWindow();
    }

    public PhoneWindow() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    final JFrame frame = new JFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    // create the  inner frame
                    final JInternalFrame frame2 = new JInternalFrame("My Telephone");
                    frame2.setClosable(true);
                    frame2.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
                    // add elements to the outer frame
                    frame.setUndecorated(true);
                    frame.setBackground(new Color(0, 0, 0, 0));
                    JPanel pane = new TranslucentPane();
                    frame.setContentPane(pane);
                    frame.setLayout(new BorderLayout());
                    // add inner frame and phone picture
                    frame.add(frame2, BorderLayout.CENTER);
                    frame.add(new JLabel(new ImageIcon(ImageIO.read(getClass().getResource("/transparent-phone.png")))), BorderLayout.EAST);
                    frame.setLocationRelativeTo(null);
                    frame.setMinimumSize(new Dimension(400, 300));
                    frame.pack();
                    // show
                    frame2.setVisible(true);
                    frame.setVisible(true);
                } catch (Throwable ex) {
                    ex.printStackTrace();
                }

            }
        });
    }

    public class TranslucentPane extends JPanel {

        public TranslucentPane() {
            setOpaque(false);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setComposite(AlphaComposite.SrcOver.derive(0f));
            g2d.setColor(getBackground());
            g2d.fillRect(0, 0, getWidth(), getHeight());
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

这是完整的Java类(包括close和draggable行为)

https://gist.github.com/nickgrealy/16901a6428cb79d4f179

这是最终产品的屏幕截图

注意手机内/外的透明部分.

最终结果具有透明度.

参考文献: