`
cyl19880415
  • 浏览: 4863 次
  • 性别: 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 Swing库中的一个组件,用于在应用程序中与用户交互,允许他们选择字体、字号和样式。在Java编程中,我们通常使用`JOptionPane`或自定义的`JFrame`来创建这样的对话框。这个压缩包文件可能包含...

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

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

    Java文件对话框---FileDialog.pdf

    在某些操作系统中,`FileDialog`还可能提供额外的特性,如字体、颜色、打印机等特定类型的对话框。不过,这些特性可能会因操作系统的不同而有所差异。尽管如此,`FileDialog`仍然是Java应用程序中进行基本文件操作的...

    使用颜色字体对话框

    在这个特定的场景中,我们讨论的是如何在程序中实现“使用颜色字体对话框”,这涉及到动态改变字体颜色的功能。下面我们将详细探讨这个主题。 首先,我们需要了解颜色对话框的基本概念。在Windows API中,`...

    java 字体选择器插件

    在这里,我们将深入探讨Java字体选择器插件的原理、使用方法以及它在Java开发中的作用。 首先,我们需要理解Java中处理字体的基本概念。在Java中,字体是由`Font`类表示的,它可以指定字体家族、样式(如粗体、斜体...

    一个java字体选择器

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

    java获取系统安装字体

    在实际应用中,这个工具类可以用于创建自定义的字体选择对话框,或者用于在应用程序中动态地调整文本显示的字体。开发者可以根据需求,进一步扩展这个工具类,例如添加过滤特定字体类型(如TrueType或OpenType)、按...

    swing中自定义对话框的几种实际用法

    除了基本的组件外,还可以通过调整背景色、边框、字体等属性,以及使用自定义图标,来进一步定制对话框的外观,使其更符合应用的整体风格。 总结,Swing中的自定义对话框是提高用户体验和增强应用功能的重要手段。...

    Java窗体字体样式

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

    常用对话框的使用

    四、字体对话框 FontDialog FontDialog对话框用于让用户选择字体、字号和样式。在Windows Forms中,`FontDialog.ShowDialog()`方法能打开字体选择对话框,`FontDialog.Font`属性则返回用户选定的字体对象。 五、...

    字体,颜色对话框和exit编辑框设置颜色和button控件颜色及平面效果和取屏幕上任意一点的颜色

    本文将深入探讨标题和描述中提及的几个关键知识点:字体对话框、颜色对话框、Exit编辑框颜色设置、Button控件的颜色和平面效果,以及如何获取屏幕上的任意一点颜色。 首先,字体对话框(Font Dialog)允许用户选择...

    对话框继承、分屏、改变大小、设计字体、布局

    本主题将深入探讨对话框的继承、分屏、改变大小、设计字体以及布局等关键知识点。 1. 对话框继承:在面向对象编程中,对话框通常是作为基类(如`Dialog`或`JDialog`)的子类来创建的。通过继承,我们可以获取基类的...

    Java_Swing-fontchoose.rar_java控件字体_swing Font

    在描述中提到的字体选择器实现中,开发者可能自定义了一个组件或者对话框来模拟 `JFontChooser` 的功能,因为 `JFontChooser` 在Java Swing的标准库中并不是一个公开可用的类。这可能涉及到创建 `JComboBox` 或 `...

    模拟MSN弹出式对话框示例

    8. **自定义样式和主题**:为了让弹出式对话框更具个性化,可以允许用户自定义对话框的外观,如背景颜色、字体大小等。 在实际应用中,你可能还会遇到性能优化、资源管理、异常处理等问题。通过深入学习这些知识点...

    各种风格对话框

    通过Java代码动态修改对话框的样式,如改变字体颜色、大小,或者添加动画效果: ```java AlertDialog dialog = builder.create(); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override ...

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

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

    好用的仿IOS对话框

    2. **自定义能力**:检查库是否允许自定义对话框的颜色、字体、按钮文本等,以适应应用的品牌风格。 3. **性能优化**:考虑库的内存占用和渲染效率,避免对应用性能造成负面影响。 4. **交互一致性**:虽然外观上...

Global site tag (gtag.js) - Google Analytics