用户在对话框下拉列表中选择的为显示文本区中的文本

来源:互联网 发布:淘宝怎么才能搜到黄盘 编辑:程序博客网 时间:2024/05/22 00:18

问题描述:编写一个FontFamily类,该类对象获取当前机器可用的全部字体名称。编写一个对话框FontDialog,该对话框是模式对话框,采用BorderLayout布局,包含一个JComboBox放在北面显示全部字体的名称,包含一个JLabel放在中间,显示字体的效果,包含两个按钮放在南面,点击YES,在对话框所依赖的窗口中设置字体的效果,点击Cancle取消。编写一个窗口FrameHaveDialog,该窗口有一个按钮和一个文本区,当单击该按钮时,弹出对话框FontDialog,然后根据用户在对话框下拉列表中选择的为显示文本区中的文本。最后编写一个程序执行入口进行测试。

*代码部分:

FontFamily:

[java] view plain copy
  1. package lz_13w;  
  2.   
  3. import java.awt.Font;  
  4. import java.awt.GraphicsEnvironment;  
  5.   
  6. /* 
  7.  * FontFamily:获取系统中所有字体GraphicEnvironment这是一个抽象类,不能直接实例化。 
  8.  * getAvailableFontFamilyNames():返回一个包含此 GraphicsEnvironment 中所有字体系列名称的数组 
  9.  * String[]fontName数组获得字体名称字符串数组; 
  10.  */  
  11. public class FontFamily {  
  12.     String[] fontName;  
  13.   
  14.     FontFamily()  
  15.     {  
  16.         GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();  
  17.         fontName = e.getAvailableFontFamilyNames();  
  18.     }  
  19. }  


 

 

FontDialog:

 

[java] view plain copy
  1. package lz_13w;  
  2.   
  3. import java.awt.BorderLayout;  
  4. import java.awt.Dialog;  
  5. import java.awt.Font;  
  6. import java.awt.Frame;  
  7. import java.awt.Panel;  
  8. import java.awt.event.ActionEvent;  
  9. import java.awt.event.ActionListener;  
  10. import java.awt.event.ItemEvent;  
  11. import java.awt.event.ItemListener;  
  12.   
  13. import javax.swing.JButton;  
  14. import javax.swing.JComboBox;  
  15. import javax.swing.JFileChooser;  
  16. import javax.swing.JLabel;  
  17.   
  18. /* 
  19.  *弹出的有模式对话框的设置: 通过一个循环实现对JComboBox中下拉项的添加; 
  20.  *其中的Font myFont用于获取label中的字体; 
  21.  *处理ActionPreformed事件:不论触发事件的是YES还是Cancel都是将对话框的可见性SetVisible(false)设为false,只不过在 
  22.  *处理YES时要将myFont赋值为label的字体----(用于在主窗口中的输入数据字体改变时使用) 
  23.  *处理itemStateChanged(ItemEvent e):用i 获得当前选中的下拉项的索引: 
  24.  *label.setFont(new Font(fontFamily.fontName[i], Font.PLAIN, this.getFont().getSize())); 
  25.  *通过setFont()设置字体,通过new Font具体改变字体,其中参数分别是: 字体名称、 Font 的样式常量、字体大小。 
  26.  */  
  27.   
  28. public class FontDialog extends Dialog implements ActionListener, ItemListener{  
  29.     Panel panelSouth;  
  30.     JComboBox box;  
  31.     JLabel label;  
  32.     JButton button1, button2;  
  33.     FontFamily fontFamily;  
  34.     Font myFont;  
  35.       
  36.     public FontDialog(Frame f, String s, boolean b)   
  37.     {  
  38.         super(f, s, b);  
  39.         setTitle("字体选择窗口");  
  40.         setLayout(new BorderLayout());  
  41.         fontFamily = new FontFamily();  
  42.         panelSouth = new Panel();  
  43.         button1 = new JButton("YES");  
  44.         button1.addActionListener(this);  
  45.         button2 = new JButton("Cancle");  
  46.         button2.addActionListener(this);  
  47.         panelSouth.add(button1);  
  48.         panelSouth.add(button2);  
  49.         box = new JComboBox();  
  50.         for(int i = 0; i < fontFamily.fontName.length; i++)  
  51.         {  
  52.             box.addItem(fontFamily.fontName[i]);  
  53.         }  
  54.         box.addItemListener(this);  
  55.         label = new JLabel("Choice your font!  选择你的字体!");  
  56.         add(box, BorderLayout.NORTH);  
  57.         add(label, BorderLayout.CENTER);  
  58.         add(panelSouth, BorderLayout.SOUTH);  
  59.         setBounds(6060300300);  
  60.         setVisible(false);  
  61.     }  
  62.   
  63.     public void actionPerformed(ActionEvent e) {  
  64.         if(e.getSource() == button1)  
  65.         {  
  66.             myFont = label.getFont();  
  67.             setVisible(false);  
  68.         }  
  69.         else  
  70.         {  
  71.             setVisible(false);  
  72.         }  
  73.     }  
  74.   
  75.     public void itemStateChanged(ItemEvent e) {  
  76.         int i = box.getSelectedIndex();  
  77.         label.setFont(new Font(fontFamily.fontName[i], Font.PLAIN, this.getFont().getSize()));  
  78.     }  
  79.       
  80. }  


FrameHaveDialog:

 

 

[java] view plain copy
  1. package lz_13w;  
  2.   
  3. import java.awt.BorderLayout;  
  4. import java.awt.Frame;  
  5. import java.awt.event.ActionEvent;  
  6. import java.awt.event.ActionListener;  
  7.   
  8. import javax.swing.JButton;  
  9. import javax.swing.JFrame;  
  10. import javax.swing.JTextArea;  
  11. /* 
  12.  * 实现窗口:actionPreformed():当按button时触发弹出有模式对话框,当进行选择后将label的字体效果即myFont进行当前输入字符的字体改变; 
  13.  * 因为若点击对话框中的Cancel和系统默认字体一致,不改变字体; 
  14.  */  
  15.   
  16. public class FrameHaveDialog extends JFrame implements ActionListener{  
  17.     FontDialog dialog;  
  18.     JButton fontButton;  
  19.     JTextArea text;  
  20.       
  21.     public FrameHaveDialog() {  
  22.         dialog = new FontDialog(this"字体选择"true);  
  23.         dialog.setBounds(450200240250);  
  24.         fontButton = new JButton("选字体");  
  25.         fontButton.addActionListener(this);  
  26.         text = new JTextArea();  
  27.         setLayout(new BorderLayout());  
  28.         setVisible(true);  
  29.         setBounds(450200300350);  
  30.         add(fontButton, BorderLayout.NORTH);  
  31.         add(text, BorderLayout.CENTER);  
  32.         setTitle("我的字体框");  
  33.         setExtendedState(Frame.MAXIMIZED_VERT);  
  34.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  35.     }  
  36.   
  37.     public void actionPerformed(ActionEvent e) {  
  38.         dialog.setVisible(true);  
  39.         text.setFont(dialog.myFont);  
  40.     }  
  41. }  


TestDialog:

 

[java] view plain copy
  1. package lz_13w;  
  2.   
  3. public class TestDialog {  
  4.   
  5.     /** 
  6.      * @param args 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         new FrameHaveDialog();  
  10.     }  
  11.   
  12. }  


测试结果:

 

 

 

心得经验:

 

一、关键内容已经在注释中写明:关键是FontFamily的使用,以及触发事件的处理,再就是对于字体修改;

 

 

0 0
原创粉丝点击