`
lbfhappy
  • 浏览: 83241 次
社区版块
存档分类
最新评论

字体选择器

阅读更多
字体选择器其实也是挺常用的,可是JAVA就是没有提供,可能是SUN觉得字体选择器无关紧要吧,所以SUN只提供了文件选择器和颜色选择器这两个比较难实现的,那么容易实现的也就留给我们自己实现了.我实现的这个文件选择器是以前实现的.类的全称叫lbf.swing.JFontChooser,可以调用的方法是JFontChooser.showDialog(Frame owner,String title)此方法第一个参数传入父组件(可以为null),第二个参数传入对话框的标题,该方法返回Font对象,如果用户直接关闭或者点击取消,则返回null,点击确定,则返回选中的字体对象.
<!---->/*
 * JFontChooser.java
 *
 * Created on 2006年11月17日, 上午11:21
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/

package lbf.swing;

/**
 *
 * 
@author lbf
 
*/
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import javax.swing.event.*;
public class JFontChooser extends JPanel implements ActionListener,ListSelectionListener{
    
private JDialog jd;//用于显示模态的窗体
    private JComboBox fonts;//用于选择字体的下拉框
    private JList face,size;//用于选择字形和字号的列表
    private JTextField sizeJT;//用于显示选中的字形和字号
    private JButton ok,cancel;//表示选中和取消的按钮
    private Font current;//表示当然选中的字体
    private GraphicsEnvironment ge;//表示当前的图形环境
    private JLabel demo;//表示预览的label
    private String fontName="宋体";
    
private int fontStyle=Font.PLAIN,fontSize=20;
    
private Frame owner;//表示父类的组件窗体
    private Hashtable<String,Integer> ht;//名字到大小的映射
    /** Creates a new instance of JFontChooser */
    
private JFontChooser() {
        initOther();
    }
    
private void initOther(){
        current
=new Font(fontName,fontStyle,fontSize);
        ht
=new Hashtable<String,Integer>();
        sizeJT
=new JTextField("20");
        sizeJT.setEditable(
false);
        sizeJT.setBounds(
260,40,50,20);
        ge
=GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] family
=ge.getAvailableFontFamilyNames();
        fonts
=new JComboBox(family);
        fonts.setEditable(
false);
        fonts.setMaximumRowCount(
5);
        demo
=new JLabel("千里冰封  ABCD abcd",JLabel.CENTER);
        demo.setFont(current);
        String[] faceString
={"正常","粗体","斜体","粗体+斜体"};
        String[] sizeString
={"初号","小初","一号","小一","二号","小二",
        
"三号","小三","四号","小四","五号","小五","六号","小六","七号",
        
"八号","5","8","9","10","11","12","14","16","18","20","22","24",
        
"26","28","36","48","72"};
        
int[] sizeValue={42,36,26,24,22,18,16,15,14,12,11,9,7,6,5,4,5,8,9,10,11,12,14,16,18,20,
        
22,24,26,28,36,48,72};
        
for(int i=0;i<sizeString.length;i++){
            ht.put(sizeString[i],sizeValue[i]);
        }
        face
=new JList(faceString);
        size
=new JList(sizeString);
        face.setSelectedIndex(
0);
        size.setSelectedIndex(
25);
        fonts.setSelectedItem(
"宋体");
        face.setVisibleRowCount(
4);
        size.setVisibleRowCount(
4);
        ok
=new JButton("确定");
        cancel
=new JButton("取消");
        ok.addActionListener(
this);
        cancel.addActionListener(
this);
        fonts.addActionListener(
this);
        face.addListSelectionListener(
this);
        size.addListSelectionListener(
this);
    }
    
private void initWindow(String title){
        
this.setLayout(new BorderLayout());
        JLabel fontLabel
=new JLabel("字体");
        JLabel faceLabel
=new JLabel("字形");
        JLabel sizeLabel
=new JLabel("字号");
        fontLabel.setForeground(Color.RED);
        faceLabel.setForeground(Color.RED);
        sizeLabel.setForeground(Color.RED);
        fontLabel.setBounds(
20,20,100,20);
        faceLabel.setBounds(
180,20,80,20);
        sizeLabel.setBounds(
260,20,50,20);
        fonts.setBounds(
10,40,127,21);
        JScrollPane faceScroll
=new JScrollPane(face);
        JScrollPane sizeScroll
=new JScrollPane(size);
        faceScroll.setBounds(
180,40,65,100);
        sizeScroll.setBounds(
260,60,50,80);
        JPanel up
=new JPanel(null);
        JPanel center
=new JPanel(new BorderLayout());
        JPanel bottom
=new JPanel();
        up.setPreferredSize(
new Dimension(345,160));
        up.add(fontLabel);
        up.add(faceLabel);
        up.add(sizeLabel);
        up.add(fonts);
        up.add(faceScroll);
        up.add(sizeScroll);
        up.add(sizeJT);
        up.setBorder(BorderFactory.createTitledBorder(
"选择区"));
        center.add(demo,BorderLayout.CENTER);
        center.setBorder(BorderFactory.createTitledBorder(
"预览区"));
        bottom.add(ok);
        bottom.add(cancel);
        
this.add(up,BorderLayout.NORTH);
        
this.add(center,BorderLayout.CENTER);
        
this.add(bottom,BorderLayout.SOUTH);
        jd
=new JDialog(owner,title,true);
        jd.getContentPane().add(
this,BorderLayout.CENTER);
        jd.setSize(
360,360);
        jd.setResizable(
false);
        jd.setLocationRelativeTo(owner);
        jd.addWindowListener(
new WindowAdapter(){
            
public void windowClosing(WindowEvent we){
                current
=null;
                jd.dispose();
            }
        });
        jd.setVisible(
true);
    }
    
public void actionPerformed(ActionEvent ae){
        
if(ae.getSource()==fonts){
            fontName
=(String)fonts.getSelectedItem();
            current
=new Font(fontName,fontStyle,fontSize);
            demo.setFont(current);
            
this.repaint();
        }
else if(ae.getSource()==ok){
            jd.dispose();
        }
else if(ae.getSource()==cancel){
            current
=null;
            jd.dispose();
        }
    }
    
public void valueChanged(ListSelectionEvent le){
        
if(le.getSource()==face){
            String value
=(String)face.getSelectedValue();
            
if(value.equals("正常")){
                fontStyle
=Font.PLAIN;
            }
else if(value.equals("粗体")){
                fontStyle
=Font.BOLD;
            }
else if(value.equals("斜体")){
                fontStyle
=Font.ITALIC;
            }
else if(value.equals("粗体+斜体")){
                fontStyle
=Font.ITALIC|Font.BOLD;
            }
            current
=new Font(fontName,fontStyle,fontSize);
            demo.setFont(current);
            
this.repaint();
        }
else if(le.getSource()==size){
            String sizeName
=(String)size.getSelectedValue();
            sizeJT.setText(sizeName);
            fontSize
=ht.get(sizeName);
            current
=new Font(fontName,fontStyle,fontSize);
            demo.setFont(current);
            
this.repaint();
        }
    }
    
public static Font showDialog(Frame owner,String title){
        JFontChooser jf
=new JFontChooser();
        jf.initWindow(title);
        
return jf.current;
    }
   
}

分享到:
评论

相关推荐

    JavaBean字体选择器,跟windows一样方便

    在这个场景中,"JavaBean字体选择器"是指一个基于JavaBean设计原则的组件,它模拟了Windows操作系统中的字体选择对话框,为用户提供便捷的字体选取功能。 字体选择器是用户界面中常见的一种组件,它允许用户在各种...

    swing编的字体选择器

    ### Swing 编程中的字体选择器 #### 一、引言 在开发具有文本编辑功能的应用程序时,如记事本或文字处理器,为用户提供自定义字体的能力是提高用户体验的重要手段之一。Java Swing 提供了丰富的图形用户界面组件库...

    java 字体选择器插件

    Java 字体选择器插件是一种实用工具,主要针对Java开发者设计,用于在应用程序中方便地选取和预览各种字体。这个插件并非原创,但经过实际使用,被证明是高效且用户友好的。在这里,我们将深入探讨Java字体选择器...

    一个java字体选择器

    Java字体选择器是一个实用工具,它允许用户在Java应用程序中浏览和选择系统上可用的字体。这个项目展示了如何利用Java的图形用户界面(GUI)组件和字体管理功能来创建一个自定义的字体选取界面。下面将详细介绍这个...

    JavaSwing写的字体选择器.doc

    在给定的文档"JavaSwing写的字体选择器.doc"中,开发者创建了一个自定义组件,即MQFontChooser,它是一个模仿记事本中字体选择功能的对话框。 MQFontChooser 类扩展了JDialog,这是一个模态对话框,通常用于显示...

    tkFontChooser:Tkinter的简单字体选择器对话框-开源

    这个模块包含一个实现字体选择器的“ FontChooser”类和一个“ askfont”函数,该函数显示字体选择器并在用户关闭字体选择器时返回所选择的字体。 字体作为字典返回,就像函数“ tkFont.Font.actual”返回的字典...

    react-font-chooser:ReactJS 的字体选择器

    React字体选择器 0.1 一个简单的选择框来选择字体。 在查看 入门 这个插件需要 ReactJS &gt;=0.13 只需将文件放入/output目录即可。 或者甚至/src和/styles的文件,如果你想编译它们。 我懒得为 npm 生成包并上传...

    bootstrap-form-components:Bootstrap字体选择器jQuery插件

    一个简单的基于jQuery的字体选择器 一个Angular指令,用于包装基于jQuery的字体选择器 一个简单的基于jQuery的字体大小选择器 一个Angular指令,用于包装基于jQuery的字体大小选择器 如何使用组件? 在您的使能的...

    Font-Chooser-Menu:一个简单的字体选择器使用Javascript,PHP和CSS来构造文件夹中字体的复选框菜单。 选择器还允许选择背景颜色。 选择器结果存储为SESSION变量

    1. **布局与设计**:CSS 用于定义字体选择器的布局,包括菜单的结构、字体大小、颜色、边距、对齐方式等,确保界面的美观和易用性。 2. **交互效果**:通过 CSS,可以实现当鼠标悬停、点击等事件时的样式变化,增强...

    java字体选择程序

    在Java编程环境中,开发一个字体选择程序是一项常见的任务,它允许用户在众多系统字体中进行挑选,以便在GUI(图形用户界面)应用中使用。这个“java字体选择程序”是针对这一需求的一个实现,提供了大部分的功能,...

    字体选择器「Font Picker」-crx插件

    字体选择器是一种干净简单的工具,可用于识别任何网站上的字体及其详细信息。 安装扩展程序后,您将能够右键单击任何文本并查看其字体详细信息。 单击“字体详细信息”选项将打开一个弹出窗口,其中包含您需要的有关...

    HiGoogleFonts:HiGoogleFonts允许您添加Google字体选择器以轻松显示Google字体列表。 选择器显示字体样式的即时预览,而无需加载字体css

    HiGoogleFonts允许您添加Google字体选择器以轻松显示Google字体列表。 该字体选择器与我们选择的jQuery插件一起使用。 选择器将显示字体样式的即时预览,而无需加载字体。 用法 要使用HiGoogleFonts库,只需通过5个...

    fontselect-jquery-plugin:Google Web字体api的字体选择器

    注意:此项目不再维护,有一个版本正在更新,并且Arjan Haverkamp带有其他选项,位于: : Fontselect jQuery插件字体选择器,可从作为Google Web字体api一部分的可用字体中进行选择。 让用户轻松地从Google的大量...

    Android解决了字体选择的问题

    在Android系统中,由于默认并未提供一个内置的字体选择器供开发者直接使用,因此开发者往往需要自定义解决方案来实现字体的选择功能。这个问题在标题“Android解决了字体选择的问题”中得到了体现,描述指出开发者...

    Pocket PC的字体选择器对话框

    标题 "Pocket PC的字体选择器对话框" 涉及的是在Windows CE设备,特别是Pocket PC 2002平台上创建一个自定义的字体选择界面。这个对话框不仅需要提供基本的字体选择功能,还应包含预览功能,以便用户在选择字体时...

    wp-google-font-picker-control:一个 WordPress 插件,允许您在主题定制器中使用自定义的 Google Web 字体选择器控件

    Google 字体选择器控件 描述 这个 WordPress 插件为创建了一个新的控件类型。 它将允许您轻松创建一个漂亮的 Google Web 字体选择器。 用法 包含并激活插件 挑选您最喜欢的 打开你的functions.php文件 将您喜欢的...

Global site tag (gtag.js) - Google Analytics