JFrame中的多个PNG

Posted

技术标签:

【中文标题】JFrame中的多个PNG【英文标题】:Multiple PNG's in JFrame 【发布时间】:2021-09-01 10:33:52 【问题描述】:

我试图在 JFrame 中显示多个具有透明背景的 png,但它们始终具有白色背景。

这是我的代码:

JFrame frame = this;
frame.setUndecorated(true);

back1 = new ImageIcon("res/launcher/back_1.png");
JLabel label = new JLabel(back1);
label.setOpaque(false);
label.repaint();
frame.add(label);

play_btn = new ImageIcon("res/launcher/play_btn.png");
label = new JLabel(play_btn);
label.setOpaque(false);
label.repaint();
frame.add(label);

frame.setTitle("Schach");
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2); // JFrame in middle of screen
frame.setVisible(true);

frame.repaint();

【问题讨论】:

1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。例如。 this answer 中的代码热链接到嵌入在this question 中的图像。 3) frame.setLocation(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2); // JFrame in middle of screen 可以替换为 .. frame.setLocationRelativeTo(null);(短得多)。 4) 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。 【参考方案1】:

这样修复它:

JLabel back1 = new JLabel(new ImageIcon("res/launcher/back_1.png"));
        back1.setLayout( new BorderLayout() );
        JLabel knight = new JLabel(new ImageIcon("res/launcher/play_btn.png"));
        back1.add(knight);
        frame.add(back1);

【讨论】:

以上是关于JFrame中的多个PNG的主要内容,如果未能解决你的问题,请参考以下文章

如果我有多个具有相同文本的按钮,如何检查我的 JFrame 中的哪个按钮被单击?

Java Netbeans 8.0 Jframe GUI程序 - arraylist中的每个索引值都没有显示在jtextArea中的各行上

java中jframe 和jpanel的区别

将多个png转换为gif作为R中的动画

刷新 JFrame 中的 JList

使用promises将多个svg字符串流式传输到nodejs中的png