Успешно обновляется внешний вид, но все еще возникают ошибки

Я пытаюсь обновить свой внешний вид без каких-либо ошибок, но я не могу понять, что я делаю неправильно.

Это мой класс 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);
            }
        });
    }
}

И это мое главное, где я обновляю интерфейс (смотри и чувствуй)

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, ошибка затем указывает на конструктор.

Любая помощь будет оценена. Спасибо!

1 ответ

Решение
  1. SubstanceGraphiteLookAndFeel() должен быть заключен в invokeLater()

  2. Окно окно = новое окно (); Должен быть заключен в invokeLater(), подробнее см. в учебнике по Oracle Initial Thread

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

    • использовать BufferedImage, загрузить в качестве локальной переменной

    • paintComponent вызывается из каждой мыши, ключевых событий и внутренних методов, реализованных в API, затем довольно сложно и долго вызывается ImageIcon("start.jpg").getImage(), сколько раз любое событие вызывается для перерисовки,

    • загрузить в локальную переменную

  4. setContentPane(new JPanel() {, переопределить getMin/Max/PreferredSize

Другие вопросы по тегам