fontsel.java
来自「java应用举例3」· Java 代码 · 共 130 行
JAVA
130 行
import java.lang.Integer;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
public class FontSel extends JApplet implements ItemListener {
//创建程序所需要的组件
JLabel fontLabel, sizeLabel, styleLabel;
FontPanel fontC;
JComboBox fonts, sizes, styles;
String fontchoice = "fontchoice";
int index = 0;
int stChoice = 0;
String siChoice = "10";
public void init() {
//设置小应用程序的布局为BorderLayout布局
getContentPane().setLayout( new BorderLayout() );
//创建五个Panel来装载组件,并将其添加到小应用程序中
JPanel topPanel = new JPanel();
JPanel fontPanel = new JPanel();
JPanel sizePanel = new JPanel();
JPanel stylePanel = new JPanel();
JPanel sizeAndStylePanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
fontPanel.setLayout( new GridLayout( 2, 1 ) );
sizePanel.setLayout( new GridLayout( 2, 1 ) );
stylePanel.setLayout( new GridLayout( 2, 1 ) );
sizeAndStylePanel.setLayout( new BorderLayout() );
topPanel.add( BorderLayout.WEST, fontPanel );
sizeAndStylePanel.add( BorderLayout.WEST, sizePanel );
sizeAndStylePanel.add( BorderLayout.CENTER, stylePanel );
topPanel.add( BorderLayout.CENTER, sizeAndStylePanel );
getContentPane().add( BorderLayout.NORTH, topPanel );
//创建标签
fontLabel = new JLabel();
fontLabel.setText("字体");
fontLabel.setHorizontalAlignment(JLabel.CENTER);
fontPanel.add(fontLabel);
sizeLabel = new JLabel();
sizeLabel.setText("大小");
sizeLabel.setHorizontalAlignment(JLabel.CENTER);
sizePanel.add(sizeLabel);
styleLabel = new JLabel();
styleLabel.setText("形式");
styleLabel.setHorizontalAlignment(JLabel.CENTER);
stylePanel.add(styleLabel);
//创建一个GraphicsEnvironment对象,它是图形环境,是这个程序的关键
GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
//获得字体信息名称
String envfonts[] = gEnv.getAvailableFontFamilyNames();
//创建一个向量对象,来保存字体对象
Vector vector = new Vector();
for ( int i = 1; i < envfonts.length; i++ ) {
vector.addElement(envfonts[i]);
}
//用一个选择框将字体对象加入,
fonts = new JComboBox( vector );
fonts.addItemListener(this);
fontchoice = envfonts[0];
fontPanel.add(fonts);
//用一个选择框将字体大小加入
sizes = new JComboBox( new Object[]{ "10", "12", "14", "16", "18"} );
sizes.addItemListener(this);
sizePanel.add(sizes);
//用一个选择框将字体形式对象加入
styles = new JComboBox( new Object[]{
"PLAIN",
"BOLD",
"ITALIC",
"BOLD & ITALIC"} );
styles.addItemListener(this);
stylePanel.add(styles);
fontC = new FontPanel();
fontC.setBackground(Color.white);
getContentPane().add( BorderLayout.CENTER, fontC);
}
public void itemStateChanged(ItemEvent e) {
if ( e.getStateChange() != ItemEvent.SELECTED ) {
return;
}
if ( e.getSource() == fonts ) {
//将字体类型的名称保存
fontchoice = (String)fonts.getSelectedItem();
} else if ( e.getSource() == styles ) {
index = styles.getSelectedIndex();
//将字体大小保存
stChoice = index;
} else {
////将字体形式的名称保存
siChoice = (String)sizes.getSelectedItem();
}
//用上面得到的字体信息对本程序的字体进行设定,实现了字体的转换
fontC.changeFont(fontchoice, stChoice, siChoice);
}
}
class FontPanel extends JPanel {
Font thisFont;
//构造方法
public FontPanel(){
thisFont = new Font("Arial", Font.PLAIN, 10);
}
public void changeFont(String f, int st, String si){
Integer newSize = new Integer(si);
int size = newSize.intValue();
thisFont = new Font(f, st, size);
repaint();
}
public void paintComponent (Graphics g) {
super.paintComponent( g );
//获得画笔对象
Graphics2D myPen = (Graphics2D) g;
//获得小应用程序的宽和高
int w = getWidth();
int h = getHeight();
//设定画笔颜色和字体
myPen.setColor(Color.red);
myPen.setFont(thisFont);
String change = "I love Java";
FontMetrics metrics = myPen.getFontMetrics();
int width = metrics.stringWidth( change );
int height = metrics.getHeight();
//在指定的位置用你所选择的字体写"I Love Java"
myPen.drawString( change, w/2-width/2, h/2-height/2 );
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?