Java — UIManager.setLookAndFeel не работает

#java #swing #awt #look-and-feel #uimanager

#java #swing #awt #внешний вид #uimanager

Вопрос:

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

AppScreen < Апплет:

 public class AppScreen extends Applet implements Runnable {

    protected AppFrame frame;
    protected Graphics appGraphics;

    public void createFrame(int width, int height) throws Exception {
        UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteGlassLookAndFeel");
        frame = new AppFrame(this, width, height);
        appGraphics = getAppComponent().getGraphics();
        startThread(this, 1);
    }

    public void startThread(Runnable runnable, int i) {
        final Thread thread = new Thread(runnable);
        thread.start();
        thread.setPriority(i);
    }

    public Component getAppComponent() {
        if (frame != null)
            return frame;
        else
            return this;
    }
}
  

AppFrame < Фрейм:

 public final class AppFrame extends Frame {

    private final AppScreen screen;

    public AppFrame(AppScreen screen, int width, int height) {
        this.screen = screen;
        setBounds(500, 500, width, height);
        setResizable(false);
        setVisible(true);
        toFront();
    }

    @Override
    public final void update(Graphics g) {
        screen.update(g);
    }

    @Override
    public final void paint(Graphics g) {
        screen.paint(g);
    }

}
  

Например, я вызываю метод createFrame(width, height) .

Комментарии:

1. L amp; F — это концепция Swing и относится только к компонентам Swing. java.awt.Applet и java.awt.Frame не являются компонентами Swing и всегда будут отображаться с использованием собственной системы пользовательского интерфейса.

2. @OlegEstekhin Есть ли способ, который я могу использовать, чтобы обойти это. Например, создание javax.swing. JFrame и рисование апплета внутри него?

3. Используйте компоненты Swing вместо AWT( Applet -> JApplet , Frame -> JFrame …)

4. @alex2410 должен быть ответом, потому что AWT не имеет доступа к L amp; F, строго основан на одноранговых узлах из родной ОС

5. Используйте компоненты Swing, как говорят другие, и установите L amp; F в вашем основном методе перед созданием любого компонента.