Java 构建简单窗口时出错?
我正试图建立一个窗口与一个图片,掩盖了屏幕。图片是一个JLabel,窗口是一个JFrame。在尝试了无数种方法并查阅了数小时的多个教程之后,我还不知道如何做到这一点。我同意,这是一个非常简单的问题,但我根本不明白如何处理这个问题。以下是我尝试过的代码(我注释掉了我之前尝试过的一些东西): 非常感谢您花这么多时间阅读本文,我非常感谢您为帮助一位程序员同事所付出的努力 问题1。。。 您没有main方法,因此除非您从另一个类创建该类,否则它不会运行Java 构建简单窗口时出错?,java,swing,user-interface,compiler-errors,Java,Swing,User Interface,Compiler Errors,我正试图建立一个窗口与一个图片,掩盖了屏幕。图片是一个JLabel,窗口是一个JFrame。在尝试了无数种方法并查阅了数小时的多个教程之后,我还不知道如何做到这一点。我同意,这是一个非常简单的问题,但我根本不明白如何处理这个问题。以下是我尝试过的代码(我注释掉了我之前尝试过的一些东西): 非常感谢您花这么多时间阅读本文,我非常感谢您为帮助一位程序员同事所付出的努力 问题1。。。 您没有main方法,因此除非您从另一个类创建该类,否则它不会运行 public static void main(St
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);
}
});
}
问题2。。。
现在,您将遇到一个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
的实例中,您的代码将更加可重用谢谢,这已经解释得很清楚了。我想我应该直接将图像放入JLabel本身!您的意思是“不要直接从JFrame扩展,而是使用JPanel,然后将其添加到JFrame的实例中,您的代码将更加可重用”?而且,我的图像没有填满整个窗口,为什么?它可能是映像本身,但是…?通常不鼓励从顶级容器扩展,因为它会将您锁定在单个用例中,并且您没有真正向类添加任何新功能。它还附带了一系列其他管理问题,最好由实现来解决JLabel
不会缩放图像,事实上,任何Swing组件都不会缩放图像,相反,您需要实现自己的功能查看并
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);
}
}