Java摇摆 |外观和感觉
Swing 是Java的GUI 小部件工具包。它是一个为Java程序提供图形用户界面的 API。与 AWT 不同,Swing 组件是用Java编写的,因此与平台无关。 Swing 提供特定于平台的外观和可插入外观的选项,允许应用程序具有独立于底层平台的外观。
最初, Java Swing 中的颜色和其他设置选项很少,这使得整个应用程序看起来枯燥乏味。随着Java框架的发展,引入了新的更改以使 UI 更好,从而为开发人员提供了增强Java Swing 应用程序外观的机会。
“外观”是指 GUI 小部件的外观,“感觉”是指小部件的行为方式。
Sun 的 JRE 提供以下 L&F:
- CrossPlatformLookAndFeel:这是“Java L&F”,也称为“Metal”,在所有平台上看起来都一样。它是Java API (javax.swing.plaf.metal) 的一部分,是默认设置。
- SystemLookAndFeel:在这里,应用程序使用默认为其运行的系统的 L&F。系统 L&F 在运行时确定,应用程序要求系统返回适当 L&F 的名称。
对于 Linux 和 Solaris,如果安装了 GTK+ 2.2 或更高版本,则系统 L&F 为“GTK+”,否则为“Motif”。对于 Windows,系统 L&F 是“Windows”。 - Synth:使用 XML 文件创建您自己的外观和感觉的基础。
- 多路复用:一种让 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());
}
}
}
在一个简单的计算器程序的帮助下,我们将看到不同的外观主题:
- 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(); } }
你也可以使用 Look And Feel 的实际类名作为 UIManager.setLookAndFeel() 的参数。例如,
// 设置跨平台Java L&F(也称为“Metal”)UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
- MotifLookAndFeel:只需将第 14 和 79 行更改为:
Line 14: f=new JFrame("Motif Look and Feel"); Line 79: UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
- SystemLookAndFeel:将第 14 行和第 79 行更改为:
Line 14: f=new JFrame("System Look and Feel"); Line 79: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
- WindowsClassicLookAndFeel:将第 14 和 79 行更改为:
Line 14: f=new JFrame("WindowsClassic Look and Feel"); Line 79: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
- NimbusLookAndFeel:将第 14 和 79 行更改为:
Line 14: f=new JFrame("Nimbus Look and Feel"); Line 79: UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
使用命令行参数指定外观
您可以通过在命令行中使用 -D 标志来设置swing.defaultlaf属性来指定外观。例子 -
我们将运行上述代码(不包括第 76 行)并执行以下命令:
java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel Awt
通过编辑 swing.properties 文件指定外观
在此我们将编辑 swing.properties 文件以设置swing.defaultlaf属性。该文件位于 lib 目录中。这是一个例子 -
swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
主题
引入了主题来更改默认Java Metal 外观的颜色和字体。可以将常量初始化为 3 个值之一:
- 默认金属
- 海洋
- 测试
有专业主题的选项,可以在代码中下载和使用。以下是可用的专业主题列表:
- 物质
- 海玻璃
- 信息外观
- Pgs 外观和感觉
- Quaqua 外观和感觉
- 亲子
- 液体外观和感觉
- 纹身
参考:
- https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
- http://geeknizer.com/best-java-swing-look-and-feel-themes-professional-casual-top-10/