如何设置Java桌面程序界面外观(How to Set the Look and Feel)

内容目录:

1. 使用UIManager.setLookAndFeel通过编程来指定界面外观

2. UI Manager如何选择界面外观?

3. 启动后, 改变界面外观

1. 使用UIManager.setLookAndFeel通过编程来指定界面外观.

示例代码如下:[1]

  1. import javax.swing.*; 
  2. import java.awt.*; 
  3.  
  4. public class Hello extends JFrame { 
  5.      
  6.     public Hello() { 
  7.         setPreferredSize(new Dimension(600, 400)); 
  8.         pack(); 
  9.         setDefaultCloseOperation(EXIT_ON_CLOSE); 
  10.         setVisible(true); 
  11.     } 
  12.  
  13.     public static void main(String[] args) { 
  14.         try
  15.             String lookAndFeel =  
  16.                 UIManager.getCrossPlatformLookAndFeelClassName(); 
  17.             UIManager.setLookAndFeel(lookAndFeel); 
  18.         } catch (Exception e) {} 
  19.          
  20.         new Hello(); 
  21.     } 
import javax.swing.*;
import java.awt.*;

public class Hello extends JFrame {
    
    public Hello() {
        setPreferredSize(new Dimension(600, 400));
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            String lookAndFeel = 
                UIManager.getCrossPlatformLookAndFeelClassName();
            UIManager.setLookAndFeel(lookAndFeel);
        } catch (Exception e) {}
        
        new Hello();
    }
}

方法setLookAndFeel中的参数是类LookAndFeel的子类的全称(fully qualified name). 要设置Java界面外观(Java Look and Feel), 我们使用getCrossPlatformLookAndFeelClassName方法. 如果你想设置为程序所运行的平台的界面外观, 可以使用getSystemLookAndFeelClassName方法. 要设置特殊的UI, 你可以使用具体的类名. 例如你想设置Windows界面外观, 可以使用下面的代码:

  1. UIManager.setLookAndFeel( 
  2.         "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
UIManager.setLookAndFeel(
        "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
下面是方法 setLookAndFeel的一些参数:

UIManager.getCrossPlatformLookAndFeelClassName()
--Java的界面外观, 所有平台均一致.
UIManager.getSystemLookAndFeelClassName()
--指定为当前平台的界面外观.在32位Windows平台, 为Windows界面外观; 在Mac OS平台, 为Mac OS界面外观; 在Sun平台, 为CDE/Motif界面外观.
"javax.swing.plaf.metal.MetalLookAndFeel"
--指定为Java的界面外观, 也就是方法UIManager.getCrossPlatformLookAndFeelClassName()的返回值.
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
--指定为Windows的界面外观, 仅在Windows平台起作用.
"com.sun.java.swing.plaf.motif.MotifLookAndFeel"
--指定为CDE/Motif的界面外观, 可以在所有平台起作用.
"javax.swing.plaf.mac.MacLookAndFeel"
--指定为Mac OS的界面外观, 仅在Mac OS平台起作用.

2. UI Manager如何选择界面外观?

1) 如果程序在创建所有组件之前设置了界面外观(Look and feel), UI manager则尝试创建指定界面外观类的实例(an instance of the specified look-and-feel class), 如果成功, 所有的组件均使用这种界面外观.

2) 如果程序没有成功设置界面外观, 则UI manager在创建第一个组成的UI之间, 检测用户是否在名为'swing.properties'的文件中指定了界面外观. 在Java版本的lib目录下搜索这个文件. 例如, 如果你的Java解释器(Java interpreter)在javaHomeDirectory\bin目录下, 则'swing.properties'文件(如果存在)应该在javaHomeDirectory\lib目录下. 如果用户指定了一个界面外观(译者注:即文件'swing.properties'中的配置), 则UI manager再次尝试实例化界面外观类. 下面是一个'swing.properties'文件内容的例子:

  1. # Swing properties 
  2. swing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel 
# Swing properties
swing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel

3) 如果程序或用户都没有成功设置界面外观, 则程序使用Java的界面外观(译者注:即"javax.swing.plaf.metal.MetalLookAndFeel").

3. 启动后, 改变界面外观

即使程序的GUI显示出来后, 也可以通过setLookAndFeel方法来改变界面外观. 要使已有的组件显示新的界面外观, 在每个顶层容器(top-level container)(译者注:顶层容器, 例如在Swing中一般为JFrame, JApplet, JDialog或其子类的对象)调用类SwingUtilities的updateComponentTreeUI方法, 然后你可能希望重置每个顶层容器的大小来适应它所包含的组件的新大小, 例如:

  1. UIManager.setLookAndFeel(lnfName); 
  2. SwingUtilities.updateComponentTreeUI(frame); 
  3. frame.pack(); 
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

注:

此文章翻译自《The Java Tutorial》的离线文档'Creating a GUI with JFC/Swing'中的'How to Set the Look and Feel'

[1]为了展示一个完整的可运行的程序, 我对原文的代码进行了更改, 原代码如下:

  1. public static void main(String[] args) { 
  2.     try
  3.         UIManager.setLookAndFeel( 
  4.             UIManager.getCrossPlatformLookAndFeelClassName()); 
  5.     } catch (Exception e) { } 
  6.  
  7.     new SwingApplication(); //Create and show the GUI. 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值