在编写自己的记事本小程序时,为了给里面的文本设置格式,需要一个格式对话框来进行这方面的设置,但是,在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
这时候我们就完成了基本的界面设计,接下来需要完成的是三个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();
}
}
通过上面的讲述,我想大家也知道如何去编写自己的字体设置的应用程序了吧!