JAVA语言版之字体格式设置对话框的编程实现

在编写自己的记事本小程序时,为了给里面的文本设置格式,需要一个格式对话框来进行这方面的设置,但是,在JAVA中,并没有现成的字体格式设置对话框供我们使用,这时,我们就需要自己去设计一个对话框。接下来讲述一下自己的实现。

首先发个截图看看我的对话框的效果是怎样的吧,如下所示:

在上图中我们可以看到,整个字体设置对话框包含四个部分,分别为字体的选择,字形的选择,字体大小的设置以及字体样式的示例,通过示例我们可以很方便的看到设置成的字体是什么效果的。

字形的选择,字体的选择和字体大小的设置是通过三个JList控件完成的,用一个JLabel来显示示例。

在这里需要提一点的是,在设计自己的字体设置对话框时不要将自己的类命名为Font,因为这个名称在软件自带的包中以及被定义了,所以最好换个名称。

在设计对话框时,首先我们应该定义需要用到的各种控件,如下所示:

//定义对话框需要的控件
	JList jl_fontpolics=null,jl_fontstyle=null,jl_fontsize=null;
	JPanel jp_fontpolics=null,jp_fontstyle=null,jp_fontsize=null;
	JPanel jp_setting=null,jp_example=null,jp_examplebutton=null;
	JTextField jtf_fontpolics=null,jtf_fontstyle=null,jtf_fontsize=null;
	JLabel jl_examplename=null,jl_examplecontext=null;
	JButton jb_ok=null,jb_cancel=null;

在定义了需要的控件之后就需要创建各种控件的实例并将它们添加到对话框中,程序如下所示:

//字体
		jp_setting=new JPanel();
		jp_fontpolics=new JPanel();
		jp_fontstyle=new JPanel();
		jp_fontsize=new JPanel();
		//添加边框
		Border borderpolics=BorderFactory.createLoweredBevelBorder();
		Border borderstyle=BorderFactory.createLoweredBevelBorder();
		Border bordersize=BorderFactory.createLoweredBevelBorder();
		
		borderpolics=BorderFactory.createTitledBorder(borderpolics,"字体");
		borderstyle=BorderFactory.createTitledBorder(borderstyle,"字形");
		bordersize=BorderFactory.createTitledBorder(bordersize,"大小");
		
		jp_fontpolics.setBorder(borderpolics);
		jp_fontstyle.setBorder(borderstyle);
		jp_fontsize.setBorder(bordersize);
		//定义和获取列表内容
		java.awt.Font[] fonts=java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
		int fontslength=fonts.length;
		String[] fontpolicsnames=new String[fontslength];
		String[] fontstylenames=new String[]{"常规","粗体","斜体","粗体+斜体"};
		String[] fontsizenames=new String[]{"8","9","10","11","12","14","16","18","20","24","28","32","36","40","48"};
		for(int i=0;i<fontslength;i++)
		{
			fontpolicsnames[i]=fonts[i].getName();
		}
		//创建列表
		jl_fontpolics=new JList(fontpolicsnames);
		jl_fontstyle=new JList(fontstylenames);
		jl_fontsize=new JList(fontsizenames);
		//设置为单选模式
		jl_fontpolics.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jl_fontstyle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jl_fontsize.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		//设置显示个个数为5个
		jl_fontpolics.setVisibleRowCount(5);
		jl_fontstyle.setVisibleRowCount(5);
		jl_fontsize.setVisibleRowCount(5);
		//设置文本框的默认值是列表项的第一项
		jtf_fontpolics=new JTextField(fontpolicsnames[fontslength-11]);//默认选择宋体
		jtf_fontstyle=new JTextField(fontstylenames[0]);//默认选择常规字形
		jtf_fontsize=new JTextField(fontsizenames[9]);//默认选择24号大小
		//为列表添加监听
		jl_fontpolics.addListSelectionListener(policslistener);
		jl_fontstyle.addListSelectionListener(stylelistener);
		jl_fontsize.addListSelectionListener(sizelistener);
		//让列表项可以上下移动
		JScrollPane jsp_fontpolics=new JScrollPane(jl_fontpolics);
		JScrollPane jsp_fontstyle=new JScrollPane(jl_fontstyle);
		JScrollPane jsp_fontsize=new JScrollPane(jl_fontsize);
		
		jp_fontpolics.setLayout(new BoxLayout(jp_fontpolics,BoxLayout.PAGE_AXIS));
		jp_fontstyle.setLayout(new BoxLayout(jp_fontstyle,BoxLayout.PAGE_AXIS));
		jp_fontsize.setLayout(new BoxLayout(jp_fontsize,BoxLayout.PAGE_AXIS));
		
		
		//添加控件到面板
		jp_fontpolics.add(jtf_fontpolics);
		jp_fontpolics.add(jsp_fontpolics);
		jp_fontstyle.add(jtf_fontstyle);
		jp_fontstyle.add(jsp_fontstyle);
		jp_fontsize.add(jtf_fontsize);
		jp_fontsize.add(jsp_fontsize);
		
		jp_setting.add(jp_fontpolics);
		jp_setting.add(jp_fontstyle);
		jp_setting.add(jp_fontsize);
		
		jp_example=new JPanel(new BorderLayout());
		jp_examplebutton=new JPanel();
		
		jl_examplename=new JLabel("         示例:");
		jl_examplecontext=new JLabel("AaBbCcDdEe",JButton.CENTER);
		textfont=new Font("宋体",Font.PLAIN,24);
		jl_examplecontext.setFont(textfont);
		
		jb_ok=new JButton("确定");
		jb_cancel=new JButton("退出");
		jp_examplebutton.add(jb_ok);
		jp_examplebutton.add(jb_cancel);
		jp_example.add(jl_examplename,BorderLayout.NORTH);
		jp_example.add(jl_examplecontext,BorderLayout.CENTER);
		jp_example.add(jp_examplebutton,BorderLayout.SOUTH);
		
		this.add(jp_setting,BorderLayout.NORTH);
		this.add(jp_example,BorderLayout.CENTER);

这时候我们就完成了基本的界面设计,接下来需要完成的是三个JList和两个JButton的事件监听程序的设计,并添加监听。程序如下所示:

//字体监听程序
		ListSelectionListener policslistener=new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent e) {
				//注意添加这么一段程序,防止单击时valueChanged函数被调用两次
				if(e.getValueIsAdjusting())
				{
					return;
				}
				JList polics=(JList)e.getSource();
				String policsname=(String)polics.getSelectedValue();
				jtf_fontpolics.setText(policsname);
				setTextFont();
				jl_examplecontext.setFont(textfont);		
			}
		};
		//字形监听程序
		ListSelectionListener stylelistener=new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent e) {
				//注意添加这么一段程序,防止单击时valueChanged函数被调用两次
				if(e.getValueIsAdjusting())
				{
					return;
				}
				JList style=(JList)e.getSource();
				String stylename=(String)style.getSelectedValue();
				jtf_fontstyle.setText(stylename);
				setTextFont();
				jl_examplecontext.setFont(textfont);
			}
		};
		//字体大小监听程序
		ListSelectionListener sizelistener=new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent e) {
				//注意添加这么一段程序,防止单击时valueChanged函数被调用两次
				if(e.getValueIsAdjusting())
				{
					return;
				}
				JList size=(JList)e.getSource();
				String sizename=(String)size.getSelectedValue();
				jtf_fontsize.setText(sizename);
				setTextFont();
				jl_examplecontext.setFont(textfont);
			}
		};

对于两个按键的事件监听处理程序则比较简单了,如下所示:

//事件监听程序
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getActionCommand().equals("yes"))
		{
			this.nodepad.jta_message.setFont(textfont);
			this.dispose();
			
		}else if(e.getActionCommand().equals("no"))
		{
			this.dispose();
		}
	}

通过上面的讲述,我想大家也知道如何去编写自己的字体设置的应用程序了吧!



  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值