📄 fontdialog.java
字号:
package notepad.popGUI;
import java.awt.Color;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
* 类名FontDialog<BR>
* 设置字体的对话框类,用于设置字体。<BR>
*
* @version 2.0 2009-4-27<BR>
*
* @author 黎明你好
*/
public class FontDialog extends JDialog implements ListSelectionListener,
ActionListener
{
/** 序列化时为了保持版本的兼容性 */
private static final long serialVersionUID = 1L;
/** 标签:字体,字形,大小 */
JLabel fontName_label, fontForm_label, fontSize_label;
/** 文本框:字体,字形,大小 */
JTextField fontName_field, fontFrom_field, fontSize_field;
/** 列表:字体,字形,大小 */
JList fontName_list, fontForm_list, fontSize_list;
/** 示例显示文字的标签 */
JLabel shili_label, showString_label;
/**布局用的panel*/
JPanel panel;
/**确定、不小、颜色按钮*/
JButton buttonApprove, buttonCancel, buttonColor;
/** 字形名称列表数组 */
String form[] = { "常规", "斜体", "粗体", "斜粗体" };
/** 字的大小列表数组 */
String size[] = { "8", "9", "10", "11", "12", "14", "16", "18", "20", "22",
"24", "26", "28", "36", "48", "72" };
/** 默认字体 */
String fontName = "宋体";
/** 默认字形 */
int fontForm = Font.PLAIN;
/** 默认大小 */
int fontSize = 20;
/**表示字体是否需要更改,也就是点的确定还是取消*/
boolean isFontChange = false;
/** 最后要返回结果的字体对象 */
Font resultFont = null;
/** 字颜色,也是需要返回得,默认位黑色 */
Color resultFontColor = Color.BLACK;
/**
* 类的构造方法
*
* @param frame -
* JFrame 用来确定这个对话框是基于谁显示的
*/
public FontDialog(JFrame parent)
{
super(parent, "字体", true);
resultFont = new Font(fontName, fontForm, fontSize);// 根据指定名称、样式和磅值大小,创建一个新
/* Font,默认"的宋体,普通,20"*/
panel = new JPanel();
showString_label = new JLabel("黎明中文软件");
shili_label = new JLabel("示例");
buttonApprove = new JButton("确定");
buttonCancel = new JButton("取消");
buttonColor = new JButton("颜色");
fontName_label = new JLabel("字体");
fontForm_label = new JLabel("字形");
fontSize_label = new JLabel("大小");
fontName_field = new JTextField(fontName, 15);
fontFrom_field = new JTextField("常规", 12);
fontSize_field = new JTextField("20", 5);
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
fontName_list = new JList(ge.getAvailableFontFamilyNames());// 得到当前系统的字体数组
fontForm_list = new JList(form);
fontSize_list = new JList(size);
JScrollPane jspFont = new JScrollPane(fontName_list);// 滚动条
JScrollPane jspForm = new JScrollPane(fontForm_list);
JScrollPane jspSize = new JScrollPane(fontSize_list);
// 设置演示文字参数,要求文字居中,背景颜色为白色
showString_label.setFont(resultFont);
showString_label.setHorizontalAlignment(JLabel.CENTER);
showString_label.setBackground(Color.WHITE);
showString_label.setOpaque(true);// 绘制其边界内的所有像素,可以使背景颜色显示出来
// 设置列表相关属性
fontName_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 设置列表的选择模式,一次只能选择一个列表索引
fontForm_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontSize_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontName_list.setVisibleRowCount(7);// 设置列表可见行数为7行
fontForm_list.setVisibleRowCount(7);
fontSize_list.setVisibleRowCount(7);
fontName_list.addListSelectionListener(this);// 将侦听器添加到列表,每次选择发生更改时将获得通知;
fontForm_list.addListSelectionListener(this);
fontSize_list.addListSelectionListener(this);
buttonApprove.addActionListener(this);// /添加按钮的监听器
buttonCancel.addActionListener(this);
buttonColor.addActionListener(this);
fontSize_field.addActionListener(this);
// 添加各个组件,用的空布局,能好看点
this.setLayout(null);// 空布局
this.add(fontName_label);// 添加设置字体的组件
this.add(fontName_field);
this.add(jspFont);
fontName_label.setBounds(10, 5, 190, 22);
fontName_field.setBounds(10, 27, 190, 22);
jspFont.setBounds(10, 49, 190, 145);
this.add(fontForm_label);// 添加设置字形的组件
this.add(fontFrom_field);
this.add(jspForm);
fontForm_label.setBounds(210, 5, 140, 22);
fontFrom_field.setBounds(210, 27, 140, 22);
jspForm.setBounds(210, 49, 140, 145);
this.add(fontSize_label);// 添加设置字大小的组件
this.add(fontSize_field);
this.add(jspSize);
fontSize_label.setBounds(360, 5, 50, 22);
fontSize_field.setBounds(360, 27, 50, 22);
jspSize.setBounds(360, 49, 50, 145);
this.add(buttonApprove);// 添加按钮
this.add(buttonCancel);
this.add(buttonColor);
buttonApprove.setBounds(420, 30, 60, 23);
buttonCancel.setBounds(420, 60, 60, 23);
buttonColor.setBounds(420, 90, 60, 23);
this.add(showString_label);// 添加示例标签
this.add(shili_label);
shili_label.setForeground(Color.BLUE);
showString_label.setBounds(100, 230, 300, 70);
shili_label.setBounds(100, 205, 50, 22);
// 设置JDialog的属性
this.setLocationRelativeTo(parent);
this.setResizable(false);
this.setBounds(70, 100, 500, 400);
this.setResizable(false);
this.validate();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
setVisible(false);
isFontChange = false;
dispose();
}
});
}
/**
* 监听器方法,发生操作调用时,用来检测选择
*/
public void valueChanged(ListSelectionEvent e)
{
if (e.getSource() == fontName_list)
{
fontName = fontName_list.getSelectedValue().toString();// 得到选择的字体
fontName_field.setText(fontName);
}
if (e.getSource() == fontForm_list)
{
String s = fontForm_list.getSelectedValue().toString();// 得到选择的字形
fontFrom_field.setText(s);
if (s.equals("常规"))
fontForm = Font.PLAIN;
else if (s.equals("斜体"))
fontForm = Font.ITALIC;
else if (s.equals("粗体"))
fontForm = Font.BOLD;
else if (s.equals("斜粗体"))
fontForm = Font.ITALIC + Font.BOLD;
}
if (e.getSource() == fontSize_list)
{
try
{
String s = fontSize_list.getSelectedValue().toString();// 得到选择的字大小
fontSize_field.setText(s);
fontSize = Integer.parseInt(s);
}
catch (NumberFormatException ie)
{
}
}
setFont();// 改变后,相应的设置操作
}
/**
* 按钮添加的监听器的方法,点击确定时,证明字体需要设置<BR>
* 点击取消的时候,字体不修改
*/
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == buttonApprove)
{
isFontChange = true;// 设置成字体以改变够的状态
setVisible(false);// 当点确定时,设置对话框成不可见
this.dispose();
}
if (e.getSource() == buttonCancel)
{
isFontChange = false;// 设置成字体,没有改变够的状态
setVisible(false);// 点取消后,对话框不可见
this.dispose();
}
if (e.getSource() == buttonColor)
{
resultFontColor = JColorChooser.showDialog(this, "选择颜色",
Color.WHITE);// 用来选择字颜色
}
if (e.getSource() == fontSize_field)// 当手动输入字大小时候,可以做出反应
{
try
{
int size = Integer.parseInt(fontSize_field.getText());
fontSize = size;
}
catch (NumberFormatException ie)
{
}
}
setFont();// 改变后,相应的设置操作
}
/**
* 字体改变后,new字体对象,并更改示例文字的字体
*/
public void setFont()
{
resultFont = new Font(fontName, fontForm, fontSize);// 重新new要返回的字体对象
// 如果字体是英文字体,就显示字母,中文字体就实现中文
char c = fontName.charAt(0);
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
showString_label.setText("AaBaYyZz");
else
showString_label.setText("黎明中文软件");
showString_label.setFont(resultFont);// 设置示例标签上的文字的字体,字形,字的大小,和颜色
showString_label.setForeground(resultFontColor);
}
/**
* @return isFontChange 返回点击的确定还是取消
*/
public boolean isFontChange()
{
return isFontChange;
}
/**
* @return resultFont 返回确定的字体对象
*/
public Font getFont()
{
return resultFont;
}
/**
* @return resultFontColor 返回选择的字体颜色
*/
public Color getFontColor()
{
return resultFontColor;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -