Java 是否可以为不同的组件设置不同的外观?

Java 是否可以为不同的组件设置不同的外观?,java,swing,look-and-feel,Java,Swing,Look And Feel,我在面板上有许多组件,我想对不同的组件应用不同的外观和感觉。可能吗?是的 你能做到。看 但是 这是不推荐的,坦率地说,这很难看。你为什么要这么做?你有什么特别想做的吗?也许有更好的办法。不,你不能。在运行java应用程序之前,JVM只会加载SwingPropertyTirs.properties(位于jre/lib中的文件)一次,并且它只会选择默认的L&F,但是如果通过添加代码来设置外观,它将使用您选择的L&F 我在面板上有许多组件,我想对不同的组件应用不同的外观和感觉。可能吗 是的,这是可能的

我在面板上有许多组件,我想对不同的组件应用不同的外观和感觉。可能吗?

是的

你能做到。看

但是


这是不推荐的,坦率地说,这很难看。你为什么要这么做?你有什么特别想做的吗?也许有更好的办法。

不,你不能。在运行java应用程序之前,JVM只会加载SwingPropertyTirs.properties(位于jre/lib中的文件)一次,并且它只会选择默认的L&F,但是如果通过添加代码来设置外观,它将使用您选择的L&F

我在面板上有许多组件,我想对不同的组件应用不同的外观和感觉。可能吗

是的,这是可能的,不要这样做,因为大多数的外观和感觉都有所不同

  • 颜色、字体、前景、背景

  • 屏幕上的大小或首选大小

  • 对LayoutManager使用API中的其他方法

  • 在JCOmponents API中实现了各种方法,例如颜色、字体、前景、背景

  • 简单的回答--->可能会在尖叫声中造成一片混乱

我建议使用todays,它们中的大多数都有不同的颜色主题,其中一部分是独立的主题,并带有更改颜色主题的选项,然后您可以为每个组件混合内置主题或/和颜色主题


我认为成功后,你可以设置颜色、字体、前景、背景、外观和感觉,这是关于JComponents和/或与LayoutManager一起工作所需的基本知识

我知道我迟到了,但我想可能有人在使用这一技术,我使用这种技术在应用程序中添加多重外观和感觉: 在启动项目之前(写入之前=新建…)将此项置于“外观选择器”中

然后将UIManager的外观返回到在您执行此操作之前已打开的外观,如下例所示:

JButton test;
try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Windows".equals(info.getName())) {
            UIManager.setLookAndFeel(info.getClassName());
            break;
        }
    }
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
    | UnsupportedLookAndFeelException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
test = new JButton();
try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Mwtal".equals(info.getName())) {
            UIManager.setLookAndFeel(info.getClassName());
            break;
        }
    }
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
    | UnsupportedLookAndFeelException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
像这样,只有按钮测试将具有窗口的外观和感觉,其余将具有金属的外观和感觉


希望这个黑客可以帮助别人。

当然可以。但我不知道怎么做。另外,你的问题有点含糊不清1)混合PLAFs通常是个坏主意2)哪个PLAFs,为什么?也许他的意思是他想要模拟一个实际的控制面板。不同的控件彼此不同是很常见的。@TonyEnnis可能是这个,可能是那个,可能是另一个。我想知道OP的实际用例是什么。@AndrewThompson和我一样。我提出了这个建议,因为下面的答案暗示OP是疯狂的。:-)“不,你不能。”虽然这样做是不可取的,但这完全是不正确的。
JButton test;
try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Windows".equals(info.getName())) {
            UIManager.setLookAndFeel(info.getClassName());
            break;
        }
    }
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
    | UnsupportedLookAndFeelException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
test = new JButton();
try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Mwtal".equals(info.getName())) {
            UIManager.setLookAndFeel(info.getClassName());
            break;
        }
    }
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
    | UnsupportedLookAndFeelException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}