1

我正在尝试更新我的外观和感觉而没有任何错误,但我无法弄清楚我做错了什么。

这是我的窗口类:

public class Window extends JFrame {
    private static final long serialVersionUID = 1L;

    public Window() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new MigLayout());
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setMinimumSize(new Dimension(600, 700));
        setVisible(true);

        setContentPane(new JPanel() {
            private static final long serialVersionUID = 1L;

            public void paintComponent(Graphics g) {
                g.drawImage(new ImageIcon("start.jpg").getImage(), 0, 0, getWidth(),     
                    getHeight(), this);
            }
        });
    }
}

这是我更新 UI 的主要地方(外观和感觉)

public class Main {
    public static void main(String[] args) {
        Window.setDefaultLookAndFeelDecorated(true);
        try {
            UIManager.setLookAndFeel(new SubstanceGraphiteLookAndFeel());
        }
        catch (UnsupportedLookAndFeelException e) {}
        Window window = new Window();
    }
}

控制台说我的错误来自这一行: Window window = new Window();

然后这一行: setContentPane(new JPanel() {

但是,如果我删除整个 setContentPane 块,则错误将指向构造函数。

任何帮助,将不胜感激。谢谢!

4

1 回答 1

3
  1. SubstanceGraphiteLookAndFeel() 必须包装到 invokeLater()

  2. 窗口窗口 = 新窗口();应该被包装到 invokeLater() 中,更多见 Oracle 教程 Initial Thread

  3. g.drawImage(new ImageIcon("start.jpg").getImage(), 0, 0, getWidth(), getHeight(), this);

    • 使用 BufferedImage,作为局部变量加载

    • 从每个鼠标、按键事件和 API 中实现的内部方法调用paintComponent,然后重复调用相当困难和长的 ImageIcon("start.jpg").getImage(),任何事件被触发多少次以进行重绘,

    • 加载到局部变量

  4. setContentPane(new JPanel() {, 覆盖getMin/Max/PreferredSize

于 2013-05-14T21:26:21.207 回答