package notepad;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JDialog;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JColorChooser;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class SetFont implements ActionListener, ListSelectionListener
{
private static final long serialVersionUID = 1L;
private JScrollPane jScrollName, jScrollSize;
private JLabel jLabelName, jLabelStyle, jLabelSize;
private JTextField jTextName, jTextStyle, jTextSize;
private JList jListName, jListStyle, jListSize;
private JButton jButtonOK, jButtonCancel, jButtonColor;
private JTextArea jNotepad;
private JDialog fontDialog;
public SetFont(JNotepad owner, JTextArea jText)
{
jNotepad = jText;
jLabelName = new JLabel("字体名称");
jLabelName.setBounds(80, 16, 64, 20);
jLabelStyle = new JLabel("字体类型");
jLabelStyle.setBounds(206, 16, 64, 20);
jLabelSize = new JLabel("字体大小");
jLabelSize.setBounds(280, 16, 64, 20);
jTextName = new JTextField();
jTextName.setBounds(16, 40, 180, 20);
jTextStyle = new JTextField();
jTextStyle.setBounds(206, 40, 64, 20);
jTextSize = new JTextField();
jTextSize.setBounds(280, 40, 64, 20);
jButtonColor = new JButton("颜色");
jButtonColor.setBounds(28, 197, 75, 23);
jButtonColor.addActionListener(this);
jButtonOK = new JButton("确定");
jButtonOK.setBounds(150, 197, 75, 23);
jButtonOK.addActionListener(this);
jButtonCancel = new JButton("取消");
jButtonCancel.setBounds(256, 197, 75, 23);
jButtonCancel.addActionListener(this);
fontDialog = new JDialog(owner, "字体");
Container fontPane = fontDialog.getContentPane();
fontPane.setLayout(null);
fontPane.add(jLabelName, null);
fontPane.add(jLabelStyle, null);
fontPane.add(jLabelSize, null);
fontPane.add(jTextName, null);
fontPane.add(jTextStyle, null);
fontPane.add(jTextSize, null);
fontPane.add(getJScrollName(), null);
fontPane.add(getJListStyle(), null);
fontPane.add(getJScrollSize(), null);
fontPane.add(jButtonColor, null);
fontPane.add(jButtonOK, null);
fontPane.add(jButtonCancel, null);
fontDialog.setBounds(400, 200, 367,276);
fontDialog.setModal(false); // 无模式
fontDialog.setResizable(false); // 固定窗体大小
fontDialog.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
jTextName.setText(jListName.getSelectedValue().toString());
jTextStyle.setText(jListStyle.getSelectedValue().toString());
jTextSize.setText(jListSize.getSelectedValue().toString());
}
});
}
public void setVisible(boolean flag)
{
fontDialog.setVisible(flag);
}
private JScrollPane getJScrollName()
{
if (jScrollName == null)
{
String[] fontName = {"宋体","新宋体","宋体-方正超大字符集","仿宋_GB2312","楷体_GB2312",
"隶书","黑体","华文行楷","华文彩云","华文新魏","华文仿宋","华文中宋",
"华文细黑","方正舒体","方正姚体","幼圆","Arial","Arial Black","Dialog","Times New Roman"};
jListName = new JList(fontName);
jListName.addListSelectionListener(this);
jListName.setSelectedIndex(0);
jScrollName = new JScrollPane();
jScrollName.setBounds(16, 60, 180, 120);
jScrollName.setViewportView(jListName);
}
return jScrollName;
}
private JList getJListStyle()
{
if (jListStyle == null)
{
String[] fontStyle = {"常规","粗体","斜体","粗斜体"};//Font.PLAIN常规
jListStyle = new JList(fontStyle);
jListStyle.addListSelectionListener(this);
jListStyle.setSelectedIndex(0);
jListStyle.setBounds(206, 60, 64, 120);
}
return jListStyle;
}
private JScrollPane getJScrollSize()
{
if (jListSize == null)
{
String[] fontSize = {"12","14","16","18","20","22","24","26","28","32","36","48","64","72"};
jListSize = new JList(fontSize);
jListSize.addListSelectionListener(this);
jListSize.setSelectedIndex(0);
jScrollSize = new JScrollPane();
jScrollSize.setBounds(280, 60, 64, 120);
jScrollSize.setViewportView(jListSize);
}
return jScrollSize;
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource().equals(jButtonOK))
{
Font font = new Font(jListName.getSelectedValue() + "", jListStyle.getSelectedIndex(), Integer.parseInt(jListSize.getSelectedValue() + ""));
jNotepad.setFont(font);
}
else if(e.getSource().equals(jButtonCancel))
{
jTextName.setText(jListName.getSelectedValue() + "");
jTextStyle.setText(jListStyle.getSelectedValue() + "");
jTextSize.setText(jListSize.getSelectedValue() + "");
fontDialog.setVisible(false);
}
else
{
Color color = JColorChooser.showDialog(fontDialog, "字体颜色", jNotepad.getSelectedTextColor());
if (color != null)
jNotepad.setSelectedTextColor(color);
}
}
public void valueChanged(ListSelectionEvent e)
{
JList list = (JList)e.getSource();
if(e.getSource().equals(jListName))
jTextName.setText(list.getSelectedValue() + "");
else if(e.getSource().equals(jListStyle))
jTextStyle.setText(list.getSelectedValue() + "");
else
jTextSize.setText(list.getSelectedValue() + "");
}
}