/** JFontChooser.java
*
* Created on 2006年11月17日, 上午11:21
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.*/packagelbf.swing;/***
*@authorlbf*/importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;importjava.util.*;importjavax.swing.event.*;publicclassJFontChooserextendsJPanelimplementsActionListener,ListSelectionListener{privateJDialog jd;//用于显示模态的窗体privateJComboBox fonts;//用于选择字体的下拉框privateJList face,size;//用于选择字形和字号的列表privateJTextField sizeJT;//用于显示选中的字形和字号privateJButton ok,cancel;//表示选中和取消的按钮privateFont current;//表示当然选中的字体privateGraphicsEnvironment ge;//表示当前的图形环境privateJLabel demo;//表示预览的labelprivateString fontName="宋体";privateintfontStyle=Font.PLAIN,fontSize=20;privateFrame owner;//表示父类的组件窗体privateHashtableht;//名字到大小的映射/**Creates a new instance of JFontChooser*/privateJFontChooser() {
initOther();
}privatevoidinitOther(){
current=newFont(fontName,fontStyle,fontSize);
ht=newHashtable();
sizeJT=newJTextField("20");
sizeJT.setEditable(false);
sizeJT.setBounds(260,40,50,20);
ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] family=ge.getAvailableFontFamilyNames();
fonts=newJComboBox(family);
fonts.setEditable(false);
fonts.setMaximumRowCount(5);
demo=newJLabel("千里冰封 ABCD abcd",JLabel.CENTER);
demo.setFont(current);
String[] faceString={"正常","粗体","斜体","粗体+斜体"};
String[] sizeString={"初号","小初","一号","小一","二号","小二","三号","小三","四号","小四","五号","小五","六号","小六","七号","八号","5","8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};int[] sizeValue={42,36,26,24,22,18,16,15,14,12,11,9,7,6,5,4,5,8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72};for(inti=0;i
ht.put(sizeString[i],sizeValue[i]);
}
face=newJList(faceString);
size=newJList(sizeString);
face.setSelectedIndex(0);
size.setSelectedIndex(25);
fonts.setSelectedItem("宋体");
face.setVisibleRowCount(4);
size.setVisibleRowCount(4);
ok=newJButton("确定");
cancel=newJButton("取消");
ok.addActionListener(this);
cancel.addActionListener(this);
fonts.addActionListener(this);
face.addListSelectionListener(this);
size.addListSelectionListener(this);
}privatevoidinitWindow(String title){this.setLayout(newBorderLayout());
JLabel fontLabel=newJLabel("字体");
JLabel faceLabel=newJLabel("字形");
JLabel sizeLabel=newJLabel("字号");
fontLabel.setForeground(Color.RED);
faceLabel.setForeground(Color.RED);
sizeLabel.setForeground(Color.RED);
fontLabel.setBounds(20,20,100,20);
faceLabel.setBounds(180,20,80,20);
sizeLabel.setBounds(260,20,50,20);
fonts.setBounds(10,40,127,21);
JScrollPane faceScroll=newJScrollPane(face);
JScrollPane sizeScroll=newJScrollPane(size);
faceScroll.setBounds(180,40,65,100);
sizeScroll.setBounds(260,60,50,80);
JPanel up=newJPanel(null);
JPanel center=newJPanel(newBorderLayout());
JPanel bottom=newJPanel();
up.setPreferredSize(newDimension(345,160));
up.add(fontLabel);
up.add(faceLabel);
up.add(sizeLabel);
up.add(fonts);
up.add(faceScroll);
up.add(sizeScroll);
up.add(sizeJT);
up.setBorder(BorderFactory.createTitledBorder("选择区"));
center.add(demo,BorderLayout.CENTER);
center.setBorder(BorderFactory.createTitledBorder("预览区"));
bottom.add(ok);
bottom.add(cancel);this.add(up,BorderLayout.NORTH);this.add(center,BorderLayout.CENTER);this.add(bottom,BorderLayout.SOUTH);
jd=newJDialog(owner,title,true);
jd.getContentPane().add(this,BorderLayout.CENTER);
jd.setSize(360,360);
jd.setResizable(false);
jd.setLocationRelativeTo(owner);
jd.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvent we){
current=null;
jd.dispose();
}
});
jd.setVisible(true);
}publicvoidactionPerformed(ActionEvent ae){if(ae.getSource()==fonts){
fontName=(String)fonts.getSelectedItem();
current=newFont(fontName,fontStyle,fontSize);
demo.setFont(current);this.repaint();
}elseif(ae.getSource()==ok){
jd.dispose();
}elseif(ae.getSource()==cancel){
current=null;
jd.dispose();
}
}publicvoidvalueChanged(ListSelectionEvent le){if(le.getSource()==face){
String value=(String)face.getSelectedValue();if(value.equals("正常")){
fontStyle=Font.PLAIN;
}elseif(value.equals("粗体")){
fontStyle=Font.BOLD;
}elseif(value.equals("斜体")){
fontStyle=Font.ITALIC;
}elseif(value.equals("粗体+斜体")){
fontStyle=Font.ITALIC|Font.BOLD;
}
current=newFont(fontName,fontStyle,fontSize);
demo.setFont(current);this.repaint();
}elseif(le.getSource()==size){
String sizeName=(String)size.getSelectedValue();
sizeJT.setText(sizeName);
fontSize=ht.get(sizeName);
current=newFont(fontName,fontStyle,fontSize);
demo.setFont(current);this.repaint();
}
}publicstaticFont showDialog(Frame owner,String title){
JFontChooser jf=newJFontChooser();
jf.initWindow(title);returnjf.current;
}
}