JInternalFrame не использует JFrame L&F в Netbeans 7.1.2

Я создаю приложение MDI с помощью Netbeans, все работает хорошо, как и ожидалось, с параметром Look and Feel, установленным на Nimbus.

Каждый раз, когда я запускаю приложение, JFrame и его панели инструментов используют указанный L&F (Nimbus), но внутренние фреймы используют кросс-платформенный (Metal) L&F, из-за чего приложение выглядит потрепанным.

Я хочу, чтобы внутренние кадры использовали тот же L&F, что и JFrame. Пожалуйста, как мне это исправить?

Я пытался позвонить JFrame.setdefaultlookandfeeldecorated(true) и SwingUtilities.updatecomponenttreeui(frame), но они не решили проблему.


person Jide Kolade    schedule 30.11.2012    source источник
comment
1) Чтобы быстрее получить помощь, опубликуйте SSCCE. 2) Я пытался позвонить .. SwingUtilities.updatecomponenttreeui(frame), но они не решили проблему. Это не скомпилировалось.   -  person Andrew Thompson    schedule 30.11.2012
comment
@AndrewThompson Я имел в виду JFrame.setDefaultLookAndFeelDecorated(true) и SwingUtilities.updateComponentTreeUi(frame). Код компилируется, но не решает проблему.   -  person Jide Kolade    schedule 30.11.2012
comment
Хорошо, что вы заметили 2-й пункт. Теперь займитесь 1-м. ;)   -  person Andrew Thompson    schedule 30.11.2012


Ответы (1)


Каждый раз, когда я запускаю приложение, JFrame и его панели инструментов используют указанный L&F (Nimbus), но внутренние фреймы используют кросс-платформенный (Metal) L&F, из-за чего приложение выглядит потрепанным.

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

  • прочтите руководство по Oracle о Внешний вид Nimbus

введите здесь описание изображения

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;

public class TestInternalFrame {

    public TestInternalFrame() {
        final JInternalFrame internal = new JInternalFrame("test");
        final JInternalFrame hidden = new JInternalFrame("test");
        hidden.setBounds(1000, 1000, 1, 1);
        hidden.setVisible(true);
        internal.setVisible(true);
        internal.setBounds(0, 0, 100, 100);
        JDesktopPane pane = new JDesktopPane();
        pane.add(internal);
        pane.add(hidden);
        pane.setPreferredSize(new Dimension(10000, 10000));
        final JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(new JScrollPane(pane,
                JScrollPane.VERTICAL_SCROLLBAR_NEVER,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        /*frame.getContentPane().add(new JButton(new AbstractAction("Show blocked dialog") {

        private static final long serialVersionUID = 1L;

        @Override
        public void actionPerformed(ActionEvent e) {
        EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
        JOptionPane.showInternalMessageDialog(hidden, "Hi 2!");
        }
        });
        JOptionPane.showInternalMessageDialog(internal, "Hi 1!");
        }
        }), BorderLayout.PAGE_END);*/
        frame.setPreferredSize(new Dimension(400, 300));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                System.out.println(info.getName());
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e) {
            // handle exception
        } catch (ClassNotFoundException e) {
            // handle exception
        } catch (InstantiationException e) {
            // handle exception
        } catch (IllegalAccessException e) {
            // handle exception
        }

        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                TestInternalFrame tif = new TestInternalFrame();
            }
        });
    }
}
person mKorbel    schedule 30.11.2012
comment
@mrKorbel Большое спасибо, это очень похоже на то, что у меня есть, Netbeans добавляет для вас код Look and Feel, но не добавляет JFrame.setDefaultLookAndFeelDecorated(true) и SwingUtilities.updateComponentTreeUi(frame). Сначала я думал, что это может быть проблемой, но даже после их добавления это не решило проблему. Возможно, это Netbeans. Ржу не могу - person Jide Kolade; 30.11.2012
comment
Я также попытался изменить L&F на LiquidLookAndFeel, L&F JFrame изменился вполне нормально, но Internal Frames все еще застрял на Metal L&F. - person Jide Kolade; 30.11.2012
comment
@Jide Kolade только Substance может сделать это (правильно и надлежащим образом), чтобы изменить оформление JFrames (уведомление пришло из текущей темы применяется в родной ОС) - person mKorbel; 30.11.2012
comment
@mrKorbel только вещество? В самом деле? это не кажется правильным. Но попробую, надеюсь проблема решится. Спасибо. - person Jide Kolade; 30.11.2012
comment
Ресурсы @Jide Kolade вводятся из Native OS (декорации, цветовая схема, шрифты), его содержимое — чистая Java (из RootPane, ContentPane), - person mKorbel; 30.11.2012
comment
@mrKorbel У вас есть активная ссылка для скачивания Substance L&F? не могу найти в Интернете. - person Jide Kolade; 30.11.2012
comment
@Jide Kolade вот официальная страница - person mKorbel; 30.11.2012
comment
@mrKorbel, спасибо, ребята, я решил проблему, которая у меня была. Я понял, что я делаю неправильно. Я не добавлял внутренние фреймы в JDestopPane перед вызовом SwingUtilities.updateComponentTreeUi(frame). Ну, такого новичка, как я, не обвинишь :) - person Jide Kolade; 03.12.2012
comment
@mrKorbel, спасибо за ссылку, я загрузил Substance L&F вместе с библиотекой Trident, но когда я пытаюсь использовать любой SubstanceL&F, я получаю какую-то ошибку в потоке отправки Exceptiom. Как это исправить? - person Jide Kolade; 03.12.2012
comment
@Jide Kolade Вещество слишком чувствительно к EDT - person mKorbel; 03.12.2012