sample27_5.java

来自「Java SE 6.0前27-31章示的示例代码,简单易学」· Java 代码 · 共 149 行

JAVA
149
字号
package wyf.jc;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import javax.swing.plaf.metal.*;
//定义该类继承自JFrame
public class Sample27_5 extends JFrame implements ActionListener
{
	//创建各种控件
	JButton jb=new JButton("按扭");
	JTextField jtf=new JTextField();
	JRadioButton[] jrb={new JRadioButton("单选按扭1"),new JRadioButton("单选按扭2")};
	JCheckBox[] jcb={new JCheckBox("复选框1"),new JCheckBox("复选框2")};
	//创建菜单数组
	JMenu[] jm={new JMenu("外观感觉"),new JMenu("风格")};
	//创建单选菜单项数组
	JRadioButtonMenuItem[] jrbmi={new JRadioButtonMenuItem("java外观感觉",true),
	new JRadioButtonMenuItem("Windows外观感觉"),new JRadioButtonMenuItem("Motif外观感觉"),
	new JRadioButtonMenuItem("海洋场景",true),new JRadioButtonMenuItem("普通场景")};
	//创建菜单栏
	JMenuBar jmb=new JMenuBar();
	//创建按钮组数组
	ButtonGroup[] bg={new ButtonGroup(),new ButtonGroup(),new ButtonGroup()};
	//创建对应各个外观风格的全称类名字符串
	String javaMetal="javax.swing.plaf.metal.MetalLookAndFeel"; 
	String windows="com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; 
	String motif="com.sun.java.swing.plaf.motif.MotifLookAndFeel"; 
	public Sample27_5()
	{
		//将菜单添加进菜单栏
		jmb.add(jm[0]);
		jmb.add(jm[1]);
		//将菜单项添加进各个菜单
		for(int i=0;i<jrbmi.length;i++)
		{
			if(i<3)
			{//选择外观风格的菜单项
				jm[0].add(jrbmi[i]);
				bg[0].add(jrbmi[i]);
			}
			else
			{//选择场景的菜单项
				jm[1].add(jrbmi[i]);
				bg[1].add(jrbmi[i]);
			}
			//为菜单项注册动作事件监听器
			jrbmi[i].addActionListener(this);
		}
		//将菜单栏添加进窗体
		this.setJMenuBar(jmb);
		//设置窗体的布局管理器
		this.setLayout(null);
		//对各个控件进行设置
		for(int i=0;i<jrb.length;i++)
		{
			//设置单选按钮与复选框的大小位置
			jrb[i].setBounds(10+i*150,10,120,26);
			jcb[i].setBounds(10+i*150,40,120,26);
			//将单选按钮与复选框添加进窗体中
			this.add(jrb[i]);
			this.add(jcb[i]);
			//为单选按钮编组
			bg[2].add(jrb[i]);
		}
		//设置文本框的大小位置并将其添加进窗体中
		jtf.setBounds(10,70,230,26);
		this.add(jtf);	
		//设置按钮的大小位置并将其添加进窗体中
		jb.setBounds(250,70,80,26);
		this.add(jb);
		//设置窗口的标题、大小位置以及可见性
		this.setTitle("动态修改外观风格示例");
		this.setResizable(false);
		this.setBounds(100,100,350,180);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==jrbmi[0])
		{//点击java外观感觉菜单项
			this.setLAF(javaMetal);
			jm[1].setEnabled(true);
		}
		else if(e.getSource()==jrbmi[1])
		{//点击Windows外观感觉菜单项
			this.setLAF(windows);
			jm[1].setEnabled(false);
		}
		else if(e.getSource()==jrbmi[2])
		{//点击Motif外观感觉菜单项
			this.setLAF(motif);
			jm[1].setEnabled(false);
		}
		else if(e.getSource()==jrbmi[3])
		{//点击海洋场景菜单项
			this.setTheme(0);
		}
		else if(e.getSource()==jrbmi[4])
		{//点击普通场景菜单项
			this.setTheme(1);
		}
	}
	//设置外观风格的方法
	public void setLAF(String s)
	{
		try
		{   
		    //设置程序的外观风格
			UIManager.setLookAndFeel(s);
			//更新控件的外观
			SwingUtilities.updateComponentTreeUI(this);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}		
	}
	//设置场景的方法
	public void setTheme(int i)
	{
		try
		{
			//设置场景
			if(i==0)
			{
				MetalLookAndFeel.setCurrentTheme(new OceanTheme());
			}
			else
			{
				MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
			}
			//更新控件的外观
			SwingUtilities.updateComponentTreeUI(this);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}		
	}
	public static void main(String[] args)
	{
		//创建Sample27_5窗体
		new Sample27_5();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?