【问题标题】:Setting a background image on a JFrame using Swing使用 Swing 在 JFrame 上设置背景图像
【发布时间】:2012-08-07 20:50:15
【问题描述】:

我已经学习 Java 几个星期了,在将背景图像应用到 JFrame 时,我真的陷入了困境。我遇到的每个教程都没有按照我的方式创建框架(我扩展了 JFrame),或者如果他们这样做了,说明不够清晰,我无法理解。

下面的代码来自我自己的一个项目,因此请帮助我练习目前所学的知识。请您在下面的代码的基础上向我解释要添加的内容和位置,以便我可以将图像作为框架的背景?

我非常感激的一件事是,如果您能解释事情是如何工作的,为什么需要它们以及它们实际在做什么 - 我不喜欢盲目地复制和粘贴您所做的事情而没有任何线索的想法这个怎么运作。解释越深入越好;即使听起来很傲慢。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MiniPad extends JFrame implements ActionListener {

    JPanel pan = new JPanel();
    ClassLoader ldr = this.getClass().getClassLoader();
    ImageIcon closeImg = new ImageIcon(ldr.getResource("\\images\\buttons\\closeBtn.png"));
    JTextArea note = new JTextArea("", 6, 21);
    JScrollPane notes = new JScrollPane(note);
    JButton close = new JButton(closeImg);

    public static void main(String[] args) {
        MiniPad padgui = new MiniPad();
    } //Instance of GUI

    public MiniPad() {
        super("Notepad");
        setSize(265, 191);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(pan);
        setVisible(true);
//Specifications
        note.setLineWrap(true);
        note.setWrapStyleWord(true);
        notes.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        close.setBorderPainted(false);
        close.setContentAreaFilled(false);
        close.setOpaque(false);
//Adding to JPanel 'pan'
        pan.add(notes);
        pan.add(close);
        close.addActionListener(this);
    }

    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == close) {
            setVisible(false);
        }
    }
}

【问题讨论】:

标签: java image swing background jframe


【解决方案1】:

关于你的问题,因为它的标题

您需要设置自定义 Component(例如 JPanel)并覆盖 paintComponent 方法

看看

现在,您将遇到一些问题,注释窗格将挡住大部分背景,使图像变得模糊。不过,这不应该阻止尝试;)

您还需要熟悉如何制作 Swing 组件transparent

一些反馈;)

我认为您不需要保留对 Classloader 的引用,因为您使用它的目的只是增加代码的重量和复杂性。这不是一个大问题,但我的第一个问题是,“他使用类加载器做什么?”

我可能也会采用某种命名约定。一般稍微冗长一点会更容易理解代码。

close ??这是一个动作吗?也许像“closeButton”之类的东西,至少我知道它是某种类型的按钮

【讨论】:

    【解决方案2】:

    更好用:

    ImageIcon closeImg = new ImageIcon(getClass().getResource("\\images\\buttons\\closeBtn.png"));
    

    确保您的图像与 class 文件的输出位置相同。

    您的关闭按钮也会调用setVisible(false),但不会释放任何资源或退出应用程序。

    【讨论】:

    • 代替setVisible(false)使用dispose(),它将释放资源并退出应用程序(根据您的请求setDefaultCloseOperation(EXIT_ON_CLOSE)
    • 谢谢。在我学习的过程中,我不知道很多你可以做的小技巧——我基本上是按照我的书告诉我的,而这从未被提及。我会记下来的。 :-)
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2021-08-07
    • 2013-03-07
    • 1970-01-01
    • 2021-09-12
    • 2013-02-18
    相关资源
    最近更新 更多