📄 fontdialog.java
字号:
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.WindowEvent;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class FontDialog extends JDialog implements ListSelectionListener,ActionListener{
private JTextField tfont,tfontstyle,tsize;
private JLabel lblfont,lblfontstyle,lblsize;
private JLabel lblexample,lblerror;
private JList lstfont,lstfontstyle,lstsize;
private JButton btnok,btncancle;
private JPanel panel;
private Font font,newfont;
private String size[] = {"8","9","10","11","12","14","16","18","20","22","24",
"26","28","30"};
private String fontstyle[] = {"常规","粗体","斜体","粗斜体"};
private String fname[];
public FontDialog(JFrame f,String title,Boolean modal,Font newfont){
super(f,title,modal);
this.newfont = newfont;
panel = new JPanel(null);
lstfont = BuildFontList();
lstfontstyle = BuildFontStyleList();
lstsize = BuildFontSizeList();
btnok = BuildOkButton();
btncancle = BuildCancelButton();
lblexample = BuildExampleLabel();
lblerror = BuildErrorLabel();
getContentPane().add(panel);
getRootPane().setDefaultButton(btnok);
setLocation(f.getX() + 60,f.getY() + 100);
setResizable(false);
setSize(425,340);
setVisible(true);
}
public JList BuildFontList(){
GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
fname = env.getAvailableFontFamilyNames();
JList lstfont = new JList(fname);
lstfont.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrfont = new JScrollPane(lstfont);
lstfont.setSelectedValue(newfont.getName(),true);
tfont = new JTextField();
tfont.setText(newfont.getName());
lblfont = new JLabel("字体:");
lblfont.setBounds(5,5,165,20);
tfont.setBounds(5,25,165,25);
scrfont.setBounds(5,55,165,100);
panel.add(tfont);
panel.add(lblfont);
panel.add(scrfont);
lstfont.addListSelectionListener(this);
return lstfont;
}
public JList BuildFontStyleList(){
JList lstfontstyle = new JList(fontstyle);
lstfontstyle.setSelectedIndex(newfont.getStyle());
lstfontstyle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrstylefont = new JScrollPane(lstfontstyle);
tfontstyle = new JTextField();
tfontstyle.setText(lstfontstyle.getSelectedValue().toString());
lblfontstyle = new JLabel("字形:");
lblfontstyle.setBounds(180,5,100,20);
tfontstyle.setBounds(180,25,100,25);
scrstylefont.setBounds(180,55,100,100);
panel.add(lblfontstyle);
panel.add(tfontstyle);
panel.add(scrstylefont);
lstfontstyle.addListSelectionListener(this);
return lstfontstyle;
}
public JList BuildFontSizeList(){
JList lstsize = new JList(size);
lstsize.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrsize = new JScrollPane(lstsize);
lstsize.setSelectedValue(String.valueOf(newfont.getSize()),true);
lblsize = new JLabel("大小:");
tsize = new JTextField();
tsize.setText(String.valueOf(newfont.getSize()));
lblsize.setBounds(290,5,50,20);
tsize.setBounds(290,25,50,25);
scrsize.setBounds(290,55,50,100);
panel.add(scrsize);
panel.add(lblsize);
panel.add(tsize);
lstsize.addListSelectionListener(this);
return lstsize;
}
private void getStyleValue(JList list,JTextField t,String str[]){
int tmp = 0;
int index[] = list.getSelectedIndices();
for(int i = 0;i < index.length;i++){
tmp = index[i];
}
t.setText(str[tmp]);
}
public JButton BuildOkButton(){
JButton btnok = new JButton("确定");
btnok.setBounds(350,25,60,30);
panel.add(btnok);
btnok.addActionListener(this);
return btnok;
}
public JButton BuildCancelButton(){
JButton btncancle = new JButton("取消");
btncancle.setBounds(350,60,60,30);
panel.add(btncancle);
btncancle.addActionListener(this);
return btncancle;
}
public JLabel BuildExampleLabel(){
JLabel lblexample = new JLabel("Java 记事本");
lblexample.setHorizontalAlignment(JLabel.CENTER);
lblexample.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLoweredBevelBorder(),"示例"));
lblexample.setFont(newfont);
lblexample.setBounds(85,170,240,100);
panel.add(lblexample);
return lblexample;
}
public JLabel BuildErrorLabel(){
JLabel lblerror = new JLabel();
lblerror.setHorizontalAlignment(JLabel.CENTER);
lblerror.setBounds(100,275,200,30);
panel.add(lblerror);
return lblerror;
}
public void valueChanged(ListSelectionEvent e) {
getStyleValue(lstfont,tfont,fname);
getStyleValue(lstfontstyle,tfontstyle,fontstyle);
getStyleValue(lstsize,tsize,size);
lblerror.setText("");
String fontname;
int style,size;
fontname = tfont.getText();
style = Integer.valueOf(lstfontstyle.getSelectedIndex());
size = Integer.valueOf(tsize.getText());
lblexample.setFont(new Font(fontname,style,size));
}
public void actionPerformed(ActionEvent e) {
String fontname;
int style,size;
if(e.getSource() == btnok){
lblerror.setText("");
fontname = tfont.getText();
style = lstfontstyle.getSelectedIndex();
try{
size = Integer.valueOf(tsize.getText());
Font font = new Font(fontname,style,size);
setFont(font);
dispose();
}
catch(NumberFormatException nf){
lblerror.setForeground(Color.red);
lblerror.setText("输入的文本有误,请重新输入");
tsize.selectAll();
tsize.requestFocus(true);
}
}
else{
setFont(newfont);
dispose();
}
}
protected void processWindowEvent(WindowEvent e){
if (e.getID() == WindowEvent.WINDOW_CLOSING){
setFont(newfont);
dispose();
}
}
public Font getFont() {
return font;
}
public void setFont(Font font) {
this.font = font;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -