⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fontdialog.java

📁 java实现msn的功能
💻 JAVA
字号:
/*
 * @(#)FontDialog.java
 *
 * Copyright (c) 2002, Jang-Ho Hwang
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 	1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *
 * 	2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 *
 * 	3. Neither the name of the Jang-Ho Hwang nor the names of its contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *    $Id: FontDialog.java,v 1.9 2002/08/12 03:01:11 xrath Exp $
 */
package rath.jmsn.ui;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;

import rath.msnm.LocalCopy;

import rath.jmsn.MainFrame;
import rath.jmsn.ToolBox;
import rath.jmsn.util.Msg;
/**
 * 迄飘 汲沥窍绰 促捞倔肺弊
 *
 * @author Jang-Ho Hwang, rath@linuxkorea.co.kr
 * @version $Id: FontDialog.java,v 1.9 2002/08/12 03:01:11 xrath Exp $
 */
public class FontDialog extends DefaultDialog implements ToolBox, ActionListener
{
	private JLabel preview = null;
	private JTextField fontNameField = null;
	private JTextField fontSizeField = null;
	private JList fontName = null;
	private DefaultListModel fontNameModel = null;
	private JList fontSize = null;
	private DefaultListModel fontSizeModel = null;
	private JCheckBox italic = null;
	private JCheckBox bold = null;
	private JCheckBox underline = null;
	private JCheckBox strikethrough = null;
	private JCheckBox isRandomColor = null;
	private JButton fontColor = null;
	private static final String DEFAULT_FONT_NAME = "奔覆眉";
	private static final int DEFAULT_FONT_SIZE = 12;

	public FontDialog( Frame owner )
	{
		super( owner );
		setTitle( Msg.get("title.changefont") );
		createComponents();
		loadProperties();
	}

	private void createComponents()
	{
		setSize( 340, 250 );
		JPanel panel = (JPanel)getContentPane();

		preview = new JLabel( Msg.get("label.fontpreviewstring") );
		preview.setPreferredSize(new Dimension(100,50));

		TitledBorder tb = new TitledBorder(new EtchedBorder(), Msg.get("label.fontpreview"));
		tb.setTitleFont( FONT );
		preview.setBorder(tb);
		preview.setAlignmentX(SwingConstants.CENTER);
		JPanel centerPanel = new JPanel(new BorderLayout());

		JPanel fontNamePanel = new JPanel(new BorderLayout());
		tb = new TitledBorder(new EtchedBorder(), Msg.get("label.font"));
		tb.setTitleFont( FONT );
		fontNamePanel.setBorder(tb);
		fontNamePanel.setPreferredSize(new Dimension(165,15));

		fontNameField = new JTextField();
		fontNameField.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				fontNameChangeFromField();
			}
		});

		fontNameModel = new DefaultListModel();
		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		String[] fontList = ge.getAvailableFontFamilyNames();
		for(int i=0; i<fontList.length; i++)
			fontNameModel.addElement(fontList[i]);

		fontName = new JList(fontNameModel);
		fontName.addListSelectionListener( new ListSelectionListener() {
			public void valueChanged( ListSelectionEvent e )
			{
				fontNameChangeFromList();
			}
		});

		fontName.setFont( FONT );
		fontNamePanel.add(fontNameField, "North" );
		fontNamePanel.add(new JScrollPane(fontName), "Center");

		JPanel fontSizePanel = new JPanel(new BorderLayout());
		tb = new TitledBorder(new EtchedBorder(), Msg.get("label.fontsize"));
		tb.setTitleFont( FONT );
		fontSizePanel.setBorder(tb);

		fontSizeField = new JTextField();
		fontSizeField.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				fontSizeChangeFromField();
			}
		});

		fontSizeModel = new DefaultListModel();
        for(int i=9; i<=16; i++)
            fontSizeModel.addElement( String.valueOf(i) );
		fontSize = new JList(fontSizeModel);

		fontSize.addListSelectionListener( new ListSelectionListener() {
			public void valueChanged( ListSelectionEvent e )
			{
				fontSizeChangeFromList();
			}
		});
		fontSize.setFont( FONT );
		fontSizePanel.add(fontSizeField, "North" );
		fontSizePanel.add(new JScrollPane(fontSize), "Center");

		JPanel fpPanel = new JPanel();
		tb = new TitledBorder(new EtchedBorder(), Msg.get("label.fontproperties"));
		tb.setTitleFont( FONT );
		fpPanel.setBorder(tb);
		fpPanel.setLayout(new GridLayout(6,1));
		fpPanel.setPreferredSize(new Dimension(110,15));

		bold = new JCheckBox( Msg.get("label.fontbold") );
		bold.setFont( FONT );
		bold.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				setBold();
			}
		});
		italic = new JCheckBox( Msg.get("label.fontitalic") );
		italic.setFont( FONT );
		italic.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				setItalic();
			}
		});
		underline = new JCheckBox( Msg.get("label.fontunderline") );
		underline.setFont( FONT );
		underline.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				setUnderline();
			}
		});
		strikethrough = new JCheckBox( Msg.get("label.fontstrikethrough") );
		strikethrough.setFont( FONT );
		strikethrough.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				setStrikethrough();
			}
		});
		isRandomColor = new JCheckBox( Msg.get("label.israndomcolor") );
		isRandomColor.setFont( FONT );
		isRandomColor.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				setRandomColor();
			}
		});
		fontColor = new JButton();
		fontColor.setBorder(null);
		fontColor.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				setColor();
			}
		});

		fpPanel.add(bold);
		fpPanel.add(italic);
		fpPanel.add(underline);
		fpPanel.add(strikethrough);
		fpPanel.add(isRandomColor);
		fpPanel.add(fontColor);

		centerPanel.add(fontNamePanel, "Center");
		centerPanel.add(fpPanel, "East");

		JPanel buttonPanel = new JPanel( new FlowLayout(FlowLayout.CENTER, 10, 4) );
		JButton okButton = new JButton( Msg.get("button.ok") );
		okButton.setFont( FONT );
		okButton.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				dispose();
				processChange();
			}
		});

		JButton cancelButton = new JButton( Msg.get("button.cancel") );
		cancelButton.setFont( FONT );
		cancelButton.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent e )
			{
				dispose();
			}
		});
		buttonPanel.add( okButton );
		buttonPanel.add( cancelButton );

		panel.add( preview, "North" );
		panel.add( centerPanel, "Center" );
		panel.add( buttonPanel, "South" );
	}

	public void actionPerformed( ActionEvent e )
	{

	}

	protected void setRandomColor()
    {
        fontColor.setEnabled( !isRandomColor.isSelected() );
	}

	protected void setColor()
    {
		Color c =  JColorChooser.showDialog(this, Msg.get("label.choosefontcolor") , fontColor.getBackground() );
		fontColor.setBackground(c);
		preview.setForeground(c);
	}

	protected void setBold()
	{
        int i = italic.isSelected() ? Font.ITALIC : 0;
        Font font = preview.getFont();
        preview.setFont( bold.isSelected() ?
            font.deriveFont(Font.BOLD+i) :
            font.deriveFont(Font.PLAIN+i) );
	}

	protected void setItalic()
	{
		int b = bold.isSelected() ? Font.BOLD : 0;
        Font font = preview.getFont();
        preview.setFont( italic.isSelected() ?
            font.deriveFont(Font.ITALIC+b) :
            font.deriveFont(Font.PLAIN+b) );
	}

	protected void setUnderline()
	{

	}

	protected void setStrikethrough()
	{

	}

	protected void fontNameChangeFromField()
	{
		String fn = fontNameField.getText();
		if(fontNameModel.contains(fn))
        {
			int idx = fontNameModel.indexOf(fn);
			fontName.setSelectedIndex(idx);
			preview.setFont(new Font( fn, preview.getFont().getStyle(), Integer.parseInt(fontSize.getSelectedValue().toString()) ) );
		}
        else
			JOptionPane.showMessageDialog(this,"涝仿窍脚 臂裁篮 粮犁窍瘤 臼嚼聪促.");
	}

	protected void fontNameChangeFromList()
	{
		String fn = fontName.getSelectedValue().toString();
		fontNameField.setText(fn);
		try
        {
			preview.setFont(new Font( fn, preview.getFont().getStyle(), Integer.parseInt(fontSize.getSelectedValue().toString()) ) );
		}
        catch( NumberFormatException e )
        {
			preview.setFont(new Font( fn, preview.getFont().getStyle(), 12 ) );
		}
	}

	protected void fontSizeChangeFromField()
	{
		String fs = fontSizeField.getText();
		try
        {
            int iFs = Integer.parseInt(fs);
			if( iFs>16 || iFs<9 )
            {
				JOptionPane.showMessageDialog(this,"臂磊农扁绰 9~16 荤捞绢具 钦聪促.");
			}
            else
            {
				if(fontSizeModel.indexOf(fs)!=-1)
                {
					int idx = fontSizeModel.indexOf(fs);
					fontSize.setSelectedIndex(idx);
					preview.setFont( preview.getFont().deriveFont( Float.parseFloat(fs) ) );
				}
                else
					fontSize.clearSelection();
			}
		}
        catch( NumberFormatException e )
        {
			JOptionPane.showMessageDialog(this,"臂磊农扁绰 9~16 荤捞绢具 钦聪促.");
		}
	}

	protected void fontSizeChangeFromList()
	{
		String fs = fontSize.getSelectedValue().toString();
		fontSizeField.setText(fs);
		preview.setFont( preview.getFont().deriveFont( Float.parseFloat(fs) ) );
	}

	protected void loadProperties()
    {
        LocalCopy local = MainFrame.LOCALCOPY;

		String fn = local.getProperty("font.name", DEFAULT_FONT_NAME);
		String fs = local.getProperty("font.size", Integer.toString(DEFAULT_FONT_SIZE));
        boolean ir = local.getPropertyBoolean("font.israndomcolor", true);

		int red = 0;
		int green = 0;
		int blue = 0;
		try
        {
			red = Integer.parseInt(local.getProperty("font.red") );
			green = Integer.parseInt(local.getProperty("font.green") );
			blue = Integer.parseInt(local.getProperty("font.blue") );
		}
        catch( NumberFormatException e )
        {
			red = green = blue = 0;
		}

        boolean b = local.getPropertyBoolean("font.isBold", false);
        boolean i = local.getPropertyBoolean("font.isItalic", false);
        boolean s = local.getPropertyBoolean("font.isStrikeThrough", false);
        boolean u = local.getPropertyBoolean("font.isUnderline", false);

		// font size setting
		try
        {
            int iFs = Integer.parseInt(fs);
			if( iFs>16 || iFs<9 )
            {
				preview.setFont( preview.getFont().deriveFont( DEFAULT_FONT_SIZE ) );
			}
            else
            {
				if(fontSizeModel.indexOf(fs)!=-1)
                {
					int idx = fontSizeModel.indexOf(fs);
					fontSize.setSelectedIndex(idx);
					preview.setFont( preview.getFont().deriveFont( Float.parseFloat(fs) ) );
				}
                else
					fontSize.clearSelection();
			}
		}
        catch( NumberFormatException e )
        {
			preview.setFont( preview.getFont().deriveFont( DEFAULT_FONT_SIZE ) );
		}

		// font name setting
		if(fontNameModel.contains(fn))
        {
			int idx = fontNameModel.indexOf(fn);
			fontName.setSelectedIndex(idx);
			preview.setFont(new Font( fn, Font.PLAIN, Integer.parseInt(fontSize.getSelectedValue().toString()) ) );
		}
        else
			preview.setFont(new Font( DEFAULT_FONT_NAME, Font.PLAIN, Integer.parseInt(fontSize.getSelectedValue().toString()) ) );

		// font type
		bold.setSelected(b);
		setBold();
		underline.setSelected(u);
		strikethrough.setSelected(s);
		isRandomColor.setSelected(ir);
		if(ir)
			fontColor.setEnabled(false);
		
		italic.setSelected(i);
		setItalic();

        Color c = new Color(red, green, blue);
		fontColor.setBackground( c );
		preview.setForeground( c );
	}

	protected void saveProperties()
    {
        LocalCopy local = MainFrame.LOCALCOPY;
		try
		{
            boolean ir = isRandomColor.isSelected();
            local.setProperty("font.israndomcolor", String.valueOf(ir) );
            Color c = fontColor.getBackground();
            local.setProperty("font.red", String.valueOf(c.getRed()) );
            local.setProperty("font.green", String.valueOf(c.getGreen()) );
            local.setProperty("font.blue", String.valueOf(c.getBlue()) );
            local.setProperty("font.size", String.valueOf(fontSize.getSelectedValue()) );
            local.setProperty("font.name", fontName.isSelectionEmpty() ?
                DEFAULT_FONT_NAME : String.valueOf(fontName.getSelectedValue()) );

            local.setProperty("font.isBold", String.valueOf(bold.isSelected()) );
            local.setProperty("font.isItalic", String.valueOf(italic.isSelected()) );
            local.setProperty("font.isStrikeThrough", String.valueOf(strikethrough.isSelected()) );
            local.setProperty("font.isUnderline", String.valueOf(underline.isSelected()) );
			local.storeInformation();
		}
		catch( Exception e )
		{
		    e.printStackTrace();
		}
	}

	protected void processChange()
	{
		saveProperties();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -