Почему мой JFrame не перерисовывается, когда я устанавливаю новую тему Synthetica?

Я просто установил для своей темы приложения Synthetica Alu Oxide, но по какой-то причине JFrame не перерисовывается, а другая тема Synthetica перекрашивает JFrame.

Вот как выглядит моя.

http://i.imgur.com/SOBDTs4.png

Вот как это должно выглядеть.

http://www.jyloo.com/images/screenshots/syntheticaAluOxide/democenter2.png

    public MainPanel() {
    JFrame frame = new JFrame();
    frame.setTitle("Asteria 3.0 NPC Definition Editor");

    try {
        UIManager.setLookAndFeel(new SyntheticaAluOxideLookAndFeel());
    } catch (UnsupportedLookAndFeelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    components();       
    frame.setJMenuBar(menuBar);
    JTabbedPane tab = new JTabbedPane();
    tab.addTab("Information", informationTab());

    tab.addTab("Bonuses", bonusTab());
    tab.addTab("Animation", animTab());
    tab.addTab("Property", propertiesTab());
    tab.addTab("Miscellaneous", miscTab()); 

    frame.getContentPane().add(tab);
    //frame.add(this);
    frame.setSize(500, 600);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);     
}

1 ответ

Решение

Графические объекты Swing должны создаваться и обрабатываться только в потоке диспетчеризации событий после того, как вы вызвали UIManager.setLookAndFeel(),

try {
    UIManager.setLookAndFeel(new SyntheticaAluOxideLookAndFeel());
} catch (UnsupportedLookAndFeelException e) {
    e.printStackTrace();
} catch (ParseException e) {
    e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
    public void run() {
        JFrame frame = new JFrame();
        …
        frame.pack(true);
        frame.setVisible(true);
    }
});
Другие вопросы по тегам