构建简单窗口时出错?

时间:2015-08-26 01:05:37

标签: java swing user-interface compiler-errors

我正在尝试构建一个窗口,其中一张图片覆盖了屏幕。图片是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);
}

}

非常感谢您花时间阅读本文,我非常感谢您为帮助其他程序员而付出的努力!

1 个答案:

答案 0 :(得分:2)

问题#1 ......

你没有主要的方法,所以除非你从另一个班级创建班级,否则它不会运行......

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.pngMewindow存储在同一个包中,请注意这一点。

并且,生成的代码实际运行(替换为我自己的图片)

MeWindow

建议...

不要直接从JFrame扩展,而是使用JPanel,然后将其添加到JFrame的实例,您的代码将更加可重复使用