JInternalFrame меняет цвет фона (Nimbus L&F)

Я использую Nimbus L&F и пытаюсь изменить цвет фона. Я устанавливаю цвет с этим: iFrame.getContentPane().setBackground(Color.BLACK);, Однако это заканчивается небольшой областью сверху с цветом по умолчанию. И даже хуже. Если я изменю размер JInternalFrame, эта область изменит цвет с более темного серого на более светлый. Я искал эту проблему, и, по крайней мере, я понял, что это должна быть проблема, вызванная строкой заголовка.

Изображение JInternalFrame

Есть ли способ решить эту проблему? Это известная ошибка? Спасибо.

Редактировать:

Небольшая программа, где это происходит. Следующая строка вызывает проблему: ret.put("defaultFont", new Font("Arial", Font.BOLD, 16)); Это неправильный способ установить шрифт по умолчанию?

package jInternalFrameTest;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.reflect.InvocationTargetException;

import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLayeredPane;
import javax.swing.SwingUtilities;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;


public class JInternalFrameTest extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public JInternalFrameTest() {
        super("JInternalFrame Background Demo");
        int inset = 50;
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(inset, inset, screenSize.width - inset * 2, screenSize.height - inset * 2);
        addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        createGUI();
    }

    private void createGUI() {
        MyInternalFrame frame = new MyInternalFrame();
        frame.setVisible(true);
        this.getLayeredPane().add(frame, JLayeredPane.DRAG_LAYER);
        try {
            frame.setSelected(true);
        } catch (java.beans.PropertyVetoException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

        try {
            SwingUtilities.invokeAndWait(new Runnable() {

                @Override
                public void run() {

                    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {

                        if ("Nimbus".equals(info.getName())) {

                            try {

                                UIManager.setLookAndFeel(new NimbusLookAndFeel(){

                                    /**
                                    * 
                                    */
                                    private static final long serialVersionUID = 1L;

                                    @Override
                                    public UIDefaults getDefaults() {
                                        UIDefaults ret = super.getDefaults();
                                        ret.put("defaultFont", new Font("Arial", Font.BOLD, 16));
                                        return ret;
                                    }
                                });

                            } catch (UnsupportedLookAndFeelException e) {
                                   e.printStackTrace();
                            }
                        }
                    }

                    new JInternalFrameTest().setVisible(true);

                }
            });

        } catch (InvocationTargetException | InterruptedException e) {
            e.printStackTrace();
        }
    }

    class MyInternalFrame extends JInternalFrame {

        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        public MyInternalFrame() {
            super("IFrame", true, // resizable
                true, // closable
                true, // maximizable
                true);// iconifiable
            setSize(300, 300);
            getContentPane().setBackground(Color.BLACK);
                pack();
            }
    }
}

0 ответов

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