📄 fontdialog.java
字号:
package com.niit.NotaPad;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
public class FontDialog extends JDialog implements ListSelectionListener
{
private static final long serialVersionUID = 1001L;
private Container pane;
private JTextArea text;
private Font selectedFont;
private static int i = 37, j = 0, k = 7; //为和系统默认的文字信息一致
private JLabel fontLabel, styleLabel, sizeLabel,lfontbox;
private JTextField fontText, styleText, sizeText,demoText;
private JList fontList, styleList, sizeList;
private JButton confirm, cancel;
private JFrame owner;
private JPanel demoPanel;
private JComboBox cfont;
private String styleNames[] = { "常规", "粗体", "斜体", "粗斜体" };
private int styleIntNames[] = { Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC };
private String sizeNames[] = { "8", "9", "10", "11", "12", "14", "16", "18", "20",
"22", "24", "26", "28", "36", "48", "72" };
private String fontNames[] =
GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
public FontDialog( JFrame frame, JTextArea textArea )
{
super( frame, "字体" );
owner = frame;
frame.setEnabled( false );
text = textArea;
pane = getContentPane();
//==============设置面板布局为空===================
pane.setLayout( null );
//=============定位JLabel==================
fontLabel = new JLabel( "字体" );
fontLabel.setBounds(19, 8, 114, 27);
pane.add( fontLabel );
styleLabel = new JLabel( "字型" );
styleLabel.setBounds(160, 9, 73, 26);
pane.add( styleLabel );
sizeLabel = new JLabel( "大小" );
sizeLabel.setBounds(260, 8, 43, 27);
pane.add( sizeLabel );
//============定位JTextField================
fontText = new JTextField();
fontText.setText( fontNames[i] );
fontText.setEditable(false);
fontText.setBounds(19, 33, 114, 27);
pane.add( fontText );
styleText = new JTextField();
styleText.setText( styleNames[j] );
styleText.setEditable(false);
styleText.setBounds(160, 33, 73, 27);
pane.add( styleText );
sizeText = new JTextField();
sizeText.setText( sizeNames[k] );
sizeText.setEditable(false);
sizeText.setBounds(260, 33, 43, 27);
pane.add( sizeText );
//===========定位JList并添加事件监听=================
fontList = new JList( fontNames );
fontList.setSelectedIndex( i );
fontList.addListSelectionListener( this );
fontList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
JScrollPane fontPane = new JScrollPane( fontList );
fontPane.setBounds(19, 61, 114, 113);
pane.add( fontPane );
fontList.ensureIndexIsVisible( i );
styleList = new JList( styleNames );
styleList.setSelectedIndex( j );
styleList.addListSelectionListener( this );
styleList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
JScrollPane stylePane = new JScrollPane( styleList );
stylePane.setBounds(160, 61, 73, 113);
pane.add( stylePane );
styleList.ensureIndexIsVisible( j );
sizeList = new JList( sizeNames );
sizeList.setSelectedIndex( k );
sizeList.addListSelectionListener( this );
sizeList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
JScrollPane sizePane = new JScrollPane( sizeList );
sizePane.setBounds(260, 61, 43, 113);
pane.add( sizePane );
sizeList.ensureIndexIsVisible( k );
//================添加JButton按钮和事件监听================
confirm = new JButton( "确定" );
confirm.setBounds(331, 34, 73, 25);
confirm.addActionListener(new ConfirmHandle());
pane.add( confirm );
cancel = new JButton( "取消" );
cancel.setBounds(331, 73, 73, 25);
cancel.addActionListener(new ConcelHandle());
pane.add( cancel );
//===================设置示例面板==========================
TitledBorder tb = new TitledBorder( BorderFactory.createLineBorder( Color.BLACK ), "示例" );
demoPanel = new JPanel( null );
demoPanel.setBorder( tb );//以tb设置面板的边框
demoPanel.setBounds( 78, 185, 226, 88 );
demoText = new JTextField(" 本本 Just a practice");
selectedFont = new Font( fontNames[i], styleIntNames[j], Integer.parseInt( sizeNames[k] ) );//实例化Font类对象selectedFont,字体为fontNames[i],样式为styleIntNames[j],大小为Integer.parseInt( sizeNames[k] )
demoText.setFont( selectedFont );
demoText.setEditable(false);
demoText.setHorizontalAlignment( JTextField.CENTER );
demoText.setBounds(15, 20, 198, 55 );
demoPanel.add( demoText );
pane.add( demoPanel );
lfontbox=new JLabel("字符集(R)");
lfontbox.setBounds(310, 185, 100, 25);
add(lfontbox);
String[] font={"CHINESE-GB2312"};
cfont = new JComboBox(font);
cfont.setBounds(310, 215, 125, 25);
pane.add(lfontbox);
pane.add(cfont);
setSize(450, 330);
setResizable( false );
setLocation( 400,200 );
setVisible(true);
//================窗口关闭事件监听=================
addWindowListener(
new WindowAdapter()
{
public void windowClosing( WindowEvent e )
{
FontDialog.this.dispose();
owner.setEnabled( true );
owner.setVisible( true );
}
}
);
}
//=======监听所有Jlist的方法,并根据所的数值设定文本字体========
public void valueChanged( ListSelectionEvent e )
{
fontText.setText( fontList.getSelectedValue().toString() );
styleText.setText( styleList.getSelectedValue().toString() );
sizeText.setText( sizeList.getSelectedValue().toString() );
selectedFont = new Font( fontNames[fontList.getSelectedIndex()],
styleIntNames[styleList.getSelectedIndex()],
Integer.parseInt( sizeNames[sizeList.getSelectedIndex()] ) );
demoText.setFont( selectedFont );
demoText.updateUI();
}
// ===============确认按钮事件 ==================
class ConfirmHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
i = fontList.getSelectedIndex();
j = styleList.getSelectedIndex();
k = sizeList.getSelectedIndex();
text.setFont( selectedFont );
FontDialog.this.dispose();
owner.setEnabled( true );
owner.setVisible( true );
}
}
// ================取消窗口事件 =================
class ConcelHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
{
FontDialog.this.dispose();
owner.setEnabled( true );
owner.setVisible( true );
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -