📜  Java摇摆 |外观和感觉

📅  最后修改于: 2022-05-13 01:54:48.260000             🧑  作者: Mango

Java摇摆 |外观和感觉

Swing 是Java的GUI 小部件工具包。它是一个为Java程序提供图形用户界面的 API。与 AWT 不同,Swing 组件是用Java编写的,因此与平台无关。 Swing 提供特定于平台的外观和可插入外观的选项,允许应用程序具有独立于底层平台的外观。
最初, Java Swing 中的颜色和其他设置选项很少,这使得整个应用程序看起来枯燥乏味。随着Java框架的发展,引入了新的更改以使 UI 更好,从而为开发人员提供了增强Java Swing 应用程序外观的机会。

“外观”是指 GUI 小部件的外观,“感觉”是指小部件的行为方式
Sun 的 JRE 提供以下 L&F:

  1. CrossPlatformLookAndFeel:这是“Java L&F”,也称为“Metal”,在所有平台上看起来都一样。它是Java API (javax.swing.plaf.metal) 的一部分,是默认设置。
  2. SystemLookAndFeel:在这里,应用程序使用默认为其运行的系统的 L&F。系统 L&F 在运行时确定,应用程序要求系统返回适当 L&F 的名称。
    对于 Linux 和 Solaris,如果安装了 GTK+ 2.2 或更高版本,则系统 L&F 为“GTK+”,否则为“Motif”。对于 Windows,系统 L&F 是“Windows”。
  3. Synth:使用 XML 文件创建您自己的外观和感觉的基础。
  4. 多路复用:一种让 UI 方法同时委托给多个不同外观实现的方法。

我们可以使用 UIManager 直接从类路径加载 L&F 类。代码如下:

UIManager.setLookAndFeel("fully qualified name of look and feel");

例如,以下代码将应用程序外观更改为 Motif 外观:

UIManager.setLookAndFeel ("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
// Java sample code to get the list of
// installed Look and Feel themes, here is a sample code:
import javax.swing.UIManager;
  
public class MainClass {    public static void main(String[] a)
    {
        UIManager.LookAndFeelInfo[] looks = UIManager.getInstalledLookAndFeels();
        for (UIManager.LookAndFeelInfo look : looks) {
            System.out.println(look.getClassName());
        }
    }
}

GfG安装L&F

在一个简单的计算器程序的帮助下,我们将看到不同的外观主题:

  1. CrossPlatformLookAndFeel:
    // Java program to illustrate
    // CrossPlatformLookAndFeel
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.UIManager;
    import javax.swing.JFrame;
    class Awt implements ActionListener {
        JFrame f;
        JButton addbut, subbut, mulbut, divbut, b5;
        JTextField t1, t2, t3;
        JLabel l, l1;
        Awt()
        {
            f = new JFrame("Cross Platform Look and Feel");
            t1 = new JTextField("             ");
            t2 = new JTextField("             ");
            t3 = new JTextField("             ");
            addbut = new JButton("Add");
            subbut = new JButton("Sub");
            mulbut = new JButton("Mul");
            divbut = new JButton("Div");
            l = new JLabel();
            l1 = new JLabel();
        }
        public void awt1()
        {
            f.setLayout(new GridLayout(3, 2));
            f.setVisible(true);
            f.add(t1);
            f.add(t2);
            f.add(t3);
            f.add(addbut);
            f.add(subbut);
            f.add(mulbut);
            f.add(divbut);
            f.add(l);
            f.add(l1);
            addbut.addActionListener(this);
            subbut.addActionListener(this);
            mulbut.addActionListener(this);
            divbut.addActionListener(this);
            f.pack();
        }
        public void actionPerformed(ActionEvent e)
        {
            String s = new String(e.getActionCommand());
            l.setText(s);
            if ((s).equals("Add")) {
                int a = Integer.parseInt(t1.getText());
                int b = Integer.parseInt(t2.getText());
                Integer c = a + b;
                t3.setText(c.toString());
            }
            else if ((s).equals("Sub")) {
                int a = Integer.parseInt(t1.getText());
                int b = Integer.parseInt(t2.getText());
                Integer c = a - b;
                t3.setText(c.toString());
            }
            else if ((s).equals("Mul")) {
                int a = Integer.parseInt(t1.getText());
                int b = Integer.parseInt(t2.getText());
                Integer c = a * b;
                t3.setText(c.toString());
            }
        }
      
        public static void main(String args[])
        {
      
            try {
      
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
            }
            catch (Exception e) {
                System.out.println("Look and Feel not set");
            }
            Awt a = new Awt();
            a.awt1();
        }
    }
    

    GfG跨平台
    你也可以使用 Look And Feel 的实际类名作为 UIManager.setLookAndFeel() 的参数。例如,
    // 设置跨平台Java L&F(也称为“Metal”)

    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
  2. MotifLookAndFeel:只需将第 14 和 79 行更改为:
    Line 14: f=new JFrame("Motif Look and Feel");
    Line 79: UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

    GfGMotif

  3. SystemLookAndFeel:将第 14 行和第 79 行更改为:
    Line 14: f=new JFrame("System Look and Feel");
    Line 79: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

    GfG系统

  4. WindowsClassicLookAndFeel:将第 14 和 79 行更改为:
    Line 14: f=new JFrame("WindowsClassic Look and Feel");
    Line 79: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

    GfGWindows经典

  5. NimbusLookAndFeel:将第 14 和 79 行更改为:
    Line 14: f=new JFrame("Nimbus Look and Feel");
    Line 79: UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");

    GfGNimbus

使用命令行参数指定外观

您可以通过在命令行中使用 -D 标志来设置swing.defaultlaf属性来指定外观。例子 -
我们将运行上述代码(不包括第 76 行)并执行以下命令:

java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel Awt

GfG命令行

通过编辑 swing.properties 文件指定外观

在此我们将编辑 swing.properties 文件以设置swing.defaultlaf属性。该文件位于 lib 目录中。这是一个例子 -

swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel

主题

引入了主题来更改默认Java Metal 外观的颜色和字体。可以将常量初始化为 3 个值之一:

  • 默认金属
  • 海洋
  • 测试

有专业主题的选项,可以在代码中下载和使用。以下是可用的专业主题列表:

  1. 物质
  2. 海玻璃
  3. 信息外观
  4. Pgs 外观和感觉
  5. Quaqua 外观和感觉
  6. 亲子
  7. 液体外观和感觉
  8. 纹身

参考:

  1. https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
  2. http://geeknizer.com/best-java-swing-look-and-feel-themes-professional-casual-top-10/