在編寫自己的記事本小程式時,為了給裡面的文本設定格式,需要一個格式對話方塊來進行這方面的設定,但是,在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 stubif(e.getActionCommand().equals("yes")){this.nodepad.jta_message.setFont(textfont);this.dispose();}else if(e.getActionCommand().equals("no")){this.dispose();}}
通過上面的講述,我想大家也知道如何去編寫自己的字型設定的應用程式了吧!