`
cyl19880415
  • 浏览: 4728 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

java 字体对话框

阅读更多

本人不才!花了很长时间写了这个代码。不是很好,比起Windows自带的字体对话框差一点。
不过已经够用了。等将来有时间了,在进行完善。
如果有什么好的建议,可以提。本人再补。
预览效果如下图:

 

字体对话框

 

package styleDispose;

import java.awt.GraphicsEnvironment;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.ListModel;

import java.awt.Font;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.JScrollPane;
import javax.swing.BorderFactory;
import javax.swing.border.TitledBorder;
import java.awt.Color;
import javax.swing.JList;
import javax.swing.JLabel;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.JButton;
import javax.swing.SwingConstants;

public class FontChooserDialog extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 界面设计需要
	 * */
	private JPanel jPanel = null;
	private JScrollPane jScrollPane = null;
	private JPanel jPanel1 = null;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JLabel jLabel2 = null;
	private JTextField fontNameText = null;
	private JTextField fontItalicText = null;
	private JTextField fontSizeText = null;
	private JList fontNameList = null;
	private JList fontItalicList = null;
	private JList fontSizeList = null;
	private JPanel jPanel2 = null;
	private JButton okButton = null;
	private JButton regitButton = null;
	private JButton cancleButton = null;
	private JScrollPane jScrollPane1 = null;
	private JScrollPane jScrollPane2 = null;
	private JScrollPane jScrollPane3 = null;
	private static JLabel fontStyle = null;
	/**
	 * 字体默认变量
	 * */
	private Font defaultFont = new Font("\u5b8b\u4f53", Font.PLAIN, 12);
	/**
	 * 返回字体变量
	 * */
	private static Font returnFont = null;
	/**
	 * Boolean 变量,判断是否正常返回,是否用户选择了字体
	 * */
	private static boolean judge = false;
	/**
	 * 以防止事件重复调用或不必要的更改,定义两个boolean变量分别
	 * 为:fontNameList和fontSizeList判断
	 * 等于true则循环调用,false则不
	 * */
	private boolean nameJuge = true;
	private boolean sizeJuge = true;
	
	
	public FontChooserDialog(){
		this(null);
	}
	public FontChooserDialog(JFrame jframe){
		this(jframe,true);
	}
	public FontChooserDialog(JFrame jframe,boolean boo){
		this(jframe,boo,null);
	}
	public FontChooserDialog(JFrame jframe,boolean boo,Font font){
		super(jframe,boo);
		initialize();
		initializeFont(font);
		this.setLocationRelativeTo(jframe);
	}
	
	/**
	 * This method initializes this
	 * 
	 */
	private void initialize() {
        this.setContentPane(getJPanel());
        this.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
        this.setBounds(new Rectangle(0, 0, 430, 335));
        this.setTitle("字体选择对话框");
        this.addWindowListener(new WindowAdapter(){
        	public void windowClosing(WindowEvent e) {
        		judge = false;
        		closeWindow();
        	}
        });
			
	}
	public static Font showDialog(JFrame jframe,boolean boo){
		return showDialog(jframe,boo,null);
	}
	public static Font showDialog(JFrame jframe,boolean boo,Font font){
		JDialog jd = new FontChooserDialog(jframe,boo,font);
		jd.setVisible(true);
		if(judge){returnFont = fontStyle.getFont();}
		jd.dispose();
		return returnFont;
	}
	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setFont(new Font("Dialog", Font.PLAIN, 12));
			jPanel.add(getJPanel1(), null);
			jPanel.add(getJPanel2(), null);
			jPanel.add(getOkButton(), null);
			jPanel.add(getRegitButton(), null);
			jPanel.add(getCancleButton(), null);
		}
		return jPanel;
	}
	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			fontStyle = new JLabel();
			fontStyle.setText("你好!天生我才必有用!Hello World!");
			fontStyle.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontStyle.setHorizontalAlignment(SwingConstants.CENTER);
			fontStyle.setHorizontalTextPosition(SwingConstants.CENTER);
			jScrollPane = new JScrollPane();
			jScrollPane.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
			jScrollPane.setViewportView(fontStyle);
			jScrollPane.setBounds(new Rectangle(5, 20, 400, 60));
		}
		return jScrollPane;
	}
	/**
	 * This method initializes jPanel1	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			jLabel2 = new JLabel();
			jLabel2.setBounds(new Rectangle(285, 5, 120, 15));
			jLabel2.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			jLabel2.setText("大小:");
			jLabel1 = new JLabel();
			jLabel1.setBounds(new Rectangle(160, 5, 120, 15));
			jLabel1.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			jLabel1.setText("字型:");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(5, 5, 150, 15));
			jLabel.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
			jLabel.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			jLabel.setText("字体:");
			jPanel1 = new JPanel();
			jPanel1.setLayout(null);
			jPanel1.setBounds(new Rectangle(5, 5, 410, 175));
			jPanel1.setBorder(new SoftBevelBorder(SoftBevelBorder.LOWERED));
			jPanel1.add(jLabel, null);
			jPanel1.add(jLabel1, null);
			jPanel1.add(jLabel2, null);
			jPanel1.add(getFontNameText(), null);
			jPanel1.add(getFontItalicText(), null);
			jPanel1.add(getFontSizeText(), null);
			jPanel1.add(getJScrollPane1(), null);
			jPanel1.add(getJScrollPane2(), null);
			jPanel1.add(getJScrollPane3(), null);
		}
		return jPanel1;
	}
	/**
	 * This method initializes fontNameText	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getFontNameText() {
		if (fontNameText == null) {
			fontNameText = new JTextField();
			fontNameText.setBounds(new Rectangle(5, 25, 150, 20));
			fontNameText.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontNameText.addKeyListener(new KeyAdapter(){
				public void keyTyped(KeyEvent e) {
					String oldText = fontNameText.getText();
					String newText = "";
					if("".equals(fontNameText.getSelectedText()) && null == fontNameText.getSelectedText()){
						newText = fontNameText.getText()+e.getKeyChar();
					}else{
						newText = oldText.substring(0,fontNameText.getSelectionStart())+e.getKeyChar()+oldText.substring(fontNameText.getSelectionEnd());
					}
					System.out.println("fontName:"+newText);
					nameJuge = false;
					fontNameList.setSelectedValue(getLateIndex(fontNameList,newText),true);
					nameJuge = true;
				}
			});
		}
		return fontNameText;
	}
	/**
	 * This method initializes fontItalicText	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getFontItalicText() {
		if (fontItalicText == null) {
			fontItalicText = new JTextField();
			fontItalicText.setBounds(new Rectangle(160, 25, 120, 20));
			fontItalicText.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontItalicText.setEnabled(false);
		}
		return fontItalicText;
	}
	/**
	 * This method initializes fontSizeText	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getFontSizeText() {
		if (fontSizeText == null) {
			fontSizeText = new JTextField();
			fontSizeText.setBounds(new Rectangle(285, 25, 120, 20));
			fontSizeText.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontSizeText.setColumns(4);
			fontSizeText.addKeyListener(new KeyAdapter(){
				public void keyTyped(KeyEvent e) {
					//System.out.println("Key Code:"+(Character.getNumericValue(e.getKeyChar())==-1));
					String oldText = fontSizeText.getText();
					String newText = "";
					if("".equals(fontSizeText.getSelectedText()) && null == fontSizeText.getSelectedText()){
						newText = fontSizeText.getText()+e.getKeyChar();
					}else{
						newText = oldText.substring(0,fontSizeText.getSelectionStart())+e.getKeyChar()+oldText.substring(fontSizeText.getSelectionEnd());
					}
					//System.out.println("fontSize:"+newText);
					sizeJuge = false;
					fontSizeList.setSelectedValue(getLateIndex(fontSizeList,newText),true);
					if(newText.matches("(\\d)+")){
						fontStyle.setFont(new Font(fontStyle.getFont().getFontName(),fontStyle.getFont().getStyle(),Integer.parseInt(newText)));
					}
					sizeJuge = true;
				}
			});
			
		}
		return fontSizeText;
	}
	/**
	 * This method initializes fontNameList	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getFontNameList() {
		if (fontNameList == null) {
			fontNameList = new JList(GraphicsEnvironment.getLocalGraphicsEnvironment()
					.getAvailableFontFamilyNames());
			fontNameList.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontNameList
					.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
						public void valueChanged(javax.swing.event.ListSelectionEvent e) {
							if(nameJuge){fontNameText.setText(fontNameList.getSelectedValue().toString());}
							fontStyle.setFont(new Font(fontNameList.getSelectedValue().toString(),fontStyle.getFont().getStyle(),fontStyle.getFont().getSize()));
						}
					});
		}
		return fontNameList;
	}
	/**
	 * This method initializes fontItalicList	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getFontItalicList() {
		if (fontItalicList == null) {
			fontItalicList = new JList(new String[]{"Plain", "Bold", "Italic","Bold Italic"});
			fontItalicList.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontItalicList
					.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
						public void valueChanged(javax.swing.event.ListSelectionEvent e) {
							fontItalicText.setText(fontItalicList.getSelectedValue().toString());
							fontStyle.setFont(new Font(fontStyle.getFont().getFontName(),fontItalicList.getSelectedIndex(),fontStyle.getFont().getSize()));
						}
					});
		}
		return fontItalicList;
	}
	/**
	 * This method initializes fontSizeList	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getFontSizeList() {
		if (fontSizeList == null) {
			fontSizeList = new JList(new String[]{"3", "4", "5", "6", "7", "8", "9", "10",
					"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "22",
					"24", "27", "30", "34", "39", "45", "51", "60"});
			fontSizeList.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			fontSizeList
					.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
						public void valueChanged(javax.swing.event.ListSelectionEvent e) {
							if(sizeJuge){fontSizeText.setText(fontSizeList.getSelectedValue().toString());}
							fontStyle.setFont(new Font(fontStyle.getFont().getFontName(),fontStyle.getFont().getStyle(),Integer.parseInt(fontSizeList.getSelectedValue().toString())));
						}
					});
		}
		return fontSizeList;
	}
	/**
	 * This method initializes jPanel2	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel2() {
		if (jPanel2 == null) {
			jPanel2 = new JPanel();
			jPanel2.setLayout(null);
			jPanel2.setBounds(new Rectangle(3, 180, 414, 90));
			jPanel2.setBorder(BorderFactory.createTitledBorder(null, "\u6548\u679c\u9884\u89c8", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("\u5b8b\u4f53", Font.PLAIN, 12), new Color(51, 51, 51)));
			jPanel2.add(getJScrollPane(), null);
		}
		return jPanel2;
	}
	/**
	 * This method initializes okButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getOkButton() {
		if (okButton == null) {
			okButton = new JButton();
			okButton.setBounds(new Rectangle(215, 275, 60, 20));
			okButton.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			okButton.setText("确定");
			okButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					judge = true;
					closeWindow();
				}
			});
		}
		return okButton;
	}
	/**
	 * This method initializes regitButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getRegitButton() {
		if (regitButton == null) {
			regitButton = new JButton();
			regitButton.setBounds(new Rectangle(285, 275, 60, 20));
			regitButton.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			regitButton.setText("重置");
			regitButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					initializeFont(null);
				}
			});
		}
		return regitButton;
	}
	/**
	 * This method initializes cancleButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getCancleButton() {
		if (cancleButton == null) {
			cancleButton = new JButton();
			cancleButton.setBounds(new Rectangle(355, 275, 60, 20));
			cancleButton.setFont(new Font("\u5b8b\u4f53", Font.PLAIN, 12));
			cancleButton.setText("取消");
			cancleButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					judge = false;
					closeWindow();
				}
			});
		}
		return cancleButton;
	}
	/**
	 * This method initializes jScrollPane1	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane1() {
		if (jScrollPane1 == null) {
			jScrollPane1 = new JScrollPane();
			jScrollPane1.setBounds(new Rectangle(5, 50, 150, 120));
			jScrollPane1.setViewportView(getFontNameList());
		}
		return jScrollPane1;
	}
	/**
	 * This method initializes jScrollPane2	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane2() {
		if (jScrollPane2 == null) {
			jScrollPane2 = new JScrollPane();
			jScrollPane2.setBounds(new Rectangle(160, 50, 120, 120));
			jScrollPane2.setViewportView(getFontItalicList());
		}
		return jScrollPane2;
	}
	/**
	 * This method initializes jScrollPane3	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane3() {
		if (jScrollPane3 == null) {
			jScrollPane3 = new JScrollPane();
			jScrollPane3.setBounds(new Rectangle(285, 50, 120, 120));
			jScrollPane3.setViewportView(getFontSizeList());
		}
		return jScrollPane3;
	}
	
	/**
	 * 默认的字体初始化方法
	 * */
	private void initializeFont(Font font){
		if(font!=null){
			defaultFont = font;
			fontStyle.setFont(defaultFont);
		}
		fontStyle.setFont(defaultFont);
		fontNameList.setSelectedValue(defaultFont.getFontName(), true);
		fontSizeList.setSelectedValue(new Integer(defaultFont.getSize()).toString(), true);
		fontItalicList.setSelectedIndex(defaultFont.getStyle());
	}
	/**
	 * 判断里给定的值最近的索引
	 * */
	private Object getLateIndex(JList jlist,String str){
		ListModel list = jlist.getModel();
		if(str.matches("(\\d)+")){
			for(int i = list.getSize()-1;i>=0;i--){
				if(Integer.parseInt(list.getElementAt(i).toString())<=Integer.parseInt(str)){
					return list.getElementAt(i);
				}
			}
		}else {
			for(int i = list.getSize()-2;i>=0;i--){
				if(str.compareToIgnoreCase(list.getElementAt(i).toString())==0){
					return list.getElementAt(i);
				}else if(str.compareToIgnoreCase(list.getElementAt(i).toString())>0){
					return list.getElementAt(i+1);
				}
			}
		}
		return list.getElementAt(0);
	}
	/**
	 * 窗体关闭方法!
	 * */
	private void closeWindow(){
		this.setVisible(false);
	}
}  //  @jve:decl-index=0:visual-constraint="91,34"

 

4
0
分享到:
评论
2 楼 cyl19880415 2009-10-07  
谢谢了!呵呵!
1 楼 king130520 2009-10-06  
不错了~~~版本可以不断的更新的

相关推荐

    java字体对话框(附源码)

    java字体对话框 java字体对话框(附源代码) whsvc

    JAVA的字体格式设置对话框代码

    JAVA的字体格式设置对话框,用swing实现,可设置字体的大小,类型和样式。

    java 实现我的记事本

     新建:新建一个文本文件  打开:调用JDK提供的“打开”... 字体:调用“字体”对话框设置文本编辑区的字体、字形和大小  颜色:调用“颜色板”对话框设置文本编辑区的颜色  帮助主题:调用网上API文档网页

    Java窗体字体样式

    这是一个用Java做的小窗体,选择字体样式可以改变

    记事本(java)

    该记事本主要功能:主...格式菜单:包括自动换行、字体、颜色三个菜单项,主要实现了文档内容自动换行,调用Swing组件自带的颜色对话框,以及调用新创建的字体对话框;弹出式菜单:实现对文档的复制、剪切、粘贴功能。

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    JAVA写的windows记事本源代码

    所用工具:Jcreator ...八、字体(Ctrl+Q):点击或使用快捷弹出字体对话框 选择字体后,文字全部改变为所选字体 九、自动换行(Ctrl+Q):点击后实现自动换行 再点击后恢复 十、关于记事本(F1)

    进度条、对话框设计.rar_java 制作 进度条_java 进度条_组合框_组合框 颜色_进度条

    进度条的设计,掌握颜色选择器对话框的使用,文件选择器对话框的使用,使用JOptionPane类创建对话框,通过制作“设置字体”对话框,掌握列表框、单选按钮、组合框等组件的使用,了解打包工具JAR的使用

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java记事本

    仿windows记事本,可以执行通常的编辑操作,复制,黏贴,剪切,删除,撤销,重做,查找,替换。保存文件,打开文件。有字体对话框和颜色对话框。功能很齐全。

    java2 实用教程(第三版) 实验指导 上机实验7 组件及事件处理(2)

    java2 实用教程(第三版) 实验指导 上机实验7 组件及事件处理(2) 方程求根 字体对话框 英语单词拼写训练

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java2实验实用模板代码

    实验2 字体对话框 36 实验3 华容道游戏 39 上机实践8 多线程 47 实验1 线程的4种状态 47 实验2 线程之间共享数据 49 实验3 挂起、恢复和终止线程 51 上机实践9 输入输出流 55 实验1 文件加密 55 实验2 给文件的内容...

    java记事本,具新建,保存,退出。模仿windows自带的。

    该记事本具有新建,保存,退出。可以进行一些简单的查找。拥有字体对话框,可以进行设置。

Global site tag (gtag.js) - Google Analytics