实训要求:
编写一个主窗体,该窗体有“设置字体”按钮和一个文本区。 编写一个JDialog的子类;FontDialog,其中使用下拉列表显示全部 字体的名称,当选择下拉列表中某个字体名称后。FontDialog中使用标签 显示该字体的效果。 在主窗体中点击“设置字体”按钮时弹出FontDialog对话框。 在FontDialg对话框中选择完字体,点击确认按钮后返回主窗体并完 成主窗体中文本的字体设置。
参考结果:
代码: Ziti.java
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dialog;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import javax.swing.*;public class Ziti extends JFrame {JButton b;JComboBox fontName;JTextArea area;FontDialog fd = new FontDialog();String[] fontArr;String strArr1 = "睿亚训Java课程实验指导书(第二版)";public static void main(String[] args) {Ziti frame = new Ziti();frame.setBounds(600, 250, 800, 600);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setTitle("设置字体");frame.setVisible(true);}Ziti() {fd.ziti = this;area = new JTextArea(5, 10);setLayout(new BorderLayout());b = new JButton("设置字体");b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("设置字体")) {fd.setVisible(true);}}});area.setText(strArr1);add(b, BorderLayout.NORTH);add(new JScrollPane(area));}void setArea(Font font) {area.setFont(font);}}
FontDialog.java
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class FontDialog extends JDialog implements ItemListener {JComboBox fontName;JTextArea txtContent;Font font1;JButton yes, no;final String[] fontArr;final String strArr = " Hello 奥运";Ziti ziti;public FontDialog() {txtContent = new JTextArea();txtContent.setText(strArr);JScrollPane jsp = new JScrollPane(txtContent);GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();fontArr = env.getAvailableFontFamilyNames();fontName = new JComboBox(fontArr);fontName.addItemListener(this);fontName.setSelectedItem("宋体");FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 40, 5);JPanel pan = new JPanel(layout);pan.add(fontName);Container c = this.getContentPane();yes = new JButton("确定");no = new JButton("取消");yes.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("确定")) {ziti.setArea(font1);setVisible(false);}}});no.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("取消")) {setVisible(false);}}});JPanel pan2 = new JPanel(layout);pan2.add(yes);pan2.add(no);c.add(pan, BorderLayout.NORTH);c.add(jsp, BorderLayout.CENTER);c.add(pan2, BorderLayout.SOUTH);this.setBounds(600, 260, 400, 300);this.setResizable(false);this.setVisible(false);}public void itemStateChanged(ItemEvent e) {String s = (String) fontName.getSelectedItem();font1 = new Font(s, Font.PLAIN, 55);txtContent.setFont(font1);}}
运行结果: