我正在尝试构建一个窗口,其中一张图片覆盖了屏幕。图片是JLabel,窗口是JFrame。在尝试了无数种方法并查找了几个小时的多个教程之后,我还没想出如何做到这一点。我同意,这是一个非常简单的问题,但我根本不明白我是如何解决这个问题的。这是我尝试过的代码(我已经注释了一些我之前尝试过的东西):
package Buttons;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.GridLayout;
public class Mewindow extends JFrame {
private JFrame mewindow;
private JLabel mepic = new JLabel(new ImageIcon("me.png"));
public Mewindow() {
super("Here is a picture of ME!");
mewindow.setLayout(new GridLayout(1, 0, 0, 0));
// Icon me = new ImageIcon(getClass().getResource("me.png"));
add(mepic);
mewindow.setVisible(true);
mewindow.setSize(250, 250);
mewindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}
非常感谢您花时间阅读本文,我非常感谢您为帮助其他程序员而付出的努力!
答案 0 :(得分:2)
你没有主要的方法,所以除非你从另一个班级创建班级,否则它不会运行......
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
Mewindow frame = new Mewindow();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
现在,您将遇到NullPointerException
,因为mewindow
未初始化,但是,您实际上并不需要它,因为您正在使用构造函数中的值如果你试图对它进行实际操作,你最终会得到一个StackOverflowException
...但是无论如何使用它都没有意义......
public class Mewindow extends JFrame {
private JLabel mepic
public Mewindow() {
super("Here is a picture of ME!");
setLayout(new GridLayout(1, 0, 0, 0));
mepic = new JLabel(new ImageIcon(getClass().getResource("me.png")));
add(mepic);
setVisible(true);
setSize(250, 250);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}
现在,您的代码假定me.png
与Mewindow
存储在同一个包中,请注意这一点。
并且,生成的代码实际运行(替换为我自己的图片)
不要直接从JFrame
扩展,而是使用JPanel
,然后将其添加到JFrame
的实例,您的代码将更加可重复使用