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