成功更新外观,但仍然有错误

时间:2013-05-14 21:10:26

标签: java swing look-and-feel invokelater substance

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

这是我的Window类:

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();
    }
}

控制台说我的错误来自这一行: 窗口窗口=新窗口();

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  2. 窗口窗口=新窗口(); shold被包装到invokeLater()中,更多参见Oracle教程初始线程

  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