是否可以为不同的组件设置不同的外观和感觉?

时间:2012-05-18 11:31:50

标签: java swing look-and-feel

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

4 个答案:

答案 0 :(得分:6)

是,

你可以做到。见Mixing look and feel

BUT

不推荐,坦率地说,它很难看。你为什么想这么做?你想做什么具体的事情吗?也许还有更好的方法。

答案 1 :(得分:5)

  

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

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

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

  • 屏幕上的尺寸或PreferredSize

  • 使用API​​中的其他方法进行LayoutManager

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

  • 简单回答--->可能会在screeen上创造一个糟糕的混乱

我建议使用今天的Java Look and Feels,其中大多数都有各种颜色的主题,其中一部分分离主题,并可选择更改颜色主题,然后在那里你可以混合内置主题或/和每个JComponents的颜色主题

我认为,如果成功,您可以设置颜色,字体,前景,仅背景,外观和所需的基本知识,了解JComponents和/与LayoutManagers如何一起工作

答案 2 :(得分:1)

我知道我来晚了,但是我认为可能有人正在使用它,这是我用来向应用程序添加多外观的感觉的一种技巧: 在启动项目之前将其放置为外观选择器(在编写= new ...之前)

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();
}

,然后将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();
}

仅此按钮测试将具有窗口的外观,其余的将具有Metal的外观。

希望此hack可以帮助某人。

答案 3 :(得分:0)

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