Java 将新UI应用于JInternalFrame标题

Java 将新UI应用于JInternalFrame标题,java,swing,uimanager,Java,Swing,Uimanager,我以前从未对UI做过任何事情,我的任务是改变我们的内部框架标题。我们正在使用Nimbus L&F,在我们的UI管理器中,我已经尝试过了 UIManager.put("InternalFrameTitlePane.background", Color.RED); 只是想试着做些改变。这对我来说不起作用,我在某处找到了另一篇关于使用BasicInternalFrameTitlePane创建UI的帖子,因此我现在有了以下代码: public class CFrameTitleUI extends B

我以前从未对UI做过任何事情,我的任务是改变我们的内部框架标题。我们正在使用Nimbus L&F,在我们的UI管理器中,我已经尝试过了

UIManager.put("InternalFrameTitlePane.background", Color.RED);
只是想试着做些改变。这对我来说不起作用,我在某处找到了另一篇关于使用BasicInternalFrameTitlePane创建UI的帖子,因此我现在有了以下代码:

public class CFrameTitleUI extends BasicInternalFrameTitlePane {

    public CFrameTitleUI(JInternalFrame f)
    {
        super(f);
    }

    @Override
    public void paintTitleBackground(Graphics g)
    {
        g.setColor(Color.RED);
        g.fillRect(0, 0, getWidth(), getHeight());
    }
}
但现在我有了这个,我不知道该怎么办。我曾尝试使用它的
setUI()
方法在内部框架中设置UI,但这是它的标题栏,因此我确信这是错误的。我接着试了一下

UIManager.put("InternalFrameTitlePane.background", CFrameTitleUI.getClass().getName());

但什么都没有。我需要把它和nimbus L&F绑在一起吗?我们正在设置的一些内容是
“nimbusSelection”
等等

主要问题是我是否为内部框架标题正确创建了自定义UI,以及如何应用它,谢谢。

您是否也得到了同样的结果

public class InternalFrameTest extends JFrame {

    public InternalFrameTest() {

        JDesktopPane desktop = new JDesktopPane();
        JInternalFrame frame = new JInternalFrame("AHHHH!!!!", true);
        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.setOpaque(false);
        desktop.add(frame);
        setContentPane(desktop);
        setSize(600, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName());
        } catch (ClassNotFoundException|InstantiationException
                |IllegalAccessException|UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        UIManager.put("InternalFrame:InternalFrameTitlePane[Enabled].textForeground", Color.RED);
        new InternalFrameTest();
    }
}

当我运行时(不设置任何内容)

我明白了


您得到了相同的结果吗?

更改
InternalFrame:InternalFrameTitlePane[Enabled].textForeground的UI管理器值对您有帮助吗?如果你想改变背景,它会更复杂,因为它是一种渐变色,我不确定边界的其余部分会受到什么影响。@user1803551没有改变任何东西,它仍然使用默认字体。让我们从平衡的基础开始。我在一个回复中贴了一个代码,并附上了我得到的信息。这不是答案,但代码太长,无法发表评论。代码完全相同,但我的标题栏仍然有黑色文本。尽管如此,我们仍然在MAC环境中使用Java6,根据您的捕获情况,您至少在7上。所以这可能与此有关。我将编译器符合性级别更改为1.6,但仍然得到相同的结果。我从
com.sun.java.swing.plaf.nimbus
(1.6)获取LAF,而不是从
javax.swing.plaf.nimbus
(1.7)获取LAF。这对你来说是同一条路吗?此外,Nimbus是独立于平台的。我能找到的唯一一件事是在教程
中的一个注释中,不是所有版本或实现的JavaSE6都支持Nimbus
,尽管您说Nimbus确实为您加载。试试我对上面文章的补充。我的导入是com.sun.java.swing.plaf.nimbus,输出是DerivedColor(color=142143145 parent=nimbusDisabledText offset=0.0,0.0,0.0,0 pColor=142143145将相同的输出放入UIManager后表示颜色为红色,只是因为某些原因它没有显示为红色。好的,让我们更高一点。设置
UIManager.put(“text”,color.red);
UIManager.put(“control”,color.red)有什么事吗?第一个把文本变成红色,第二个把内容区的背景变成红色。
public class InternalFrameTest extends JFrame {

    public InternalFrameTest() {

        JDesktopPane desktop = new JDesktopPane();
        JInternalFrame frame = new JInternalFrame("AHHHH!!!!", true);
        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.setOpaque(false);
        desktop.add(frame);
        setContentPane(desktop);
        setSize(600, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName());
        } catch (ClassNotFoundException|InstantiationException
                |IllegalAccessException|UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        UIManager.put("InternalFrame:InternalFrameTitlePane[Enabled].textForeground", Color.RED);
        new InternalFrameTest();
    }
}
System.out.println(UIManager.getColor("InternalFrame:InternalFrameTitlePane[Enabled].textForeground"));
"DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145"