Java图形用户界面设计:字体设置程序(ArtFont.java)

需求:

设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。添加事件处理机制,要求实现如下功能:

  • 当在文本框中输入文字后回车,在文本域中显示输入的文字。
  • 当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。
  • 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的前景色和文本域的前景色设置为选定的颜色。
  • 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字体样式。
  • 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字体大小。
  • 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。

程序运行效果:

程序运行效果

**提示:**整个窗体继承于JFrame,采用BorderLayout布局。可以在窗体中添加三个面板,分别位于窗体的北部、中部和南部,然后分别在各个面板中添加其它组件,并逐步完善程序功能。

完整代码如下:

public class ArtFont extends JFrame implements ActionListener, ItemListener {
	JComboBox fontType;// 字体样式下拉框
	JComboBox fontSize;// 字体大小下拉框
	JComboBox windowStyle;// 窗体样式下拉框	
	JCheckBox boldBx;// 粗体按钮
	JCheckBox italicBx;// 斜体按钮
	JButton colorBtn;// 颜色按钮;
	String[] fontNames;// 字体名称;
	String[] fontSizes;// 字体大小;
	JLabel label;// 输入提示标签;
	JTextField inputText;// 文字输入框;
	JTextArea txtArea;// 文字显示区;
	JPanel northPanel;// 字体设置;
	JPanel centerPanel;// 显示效果区
	JPanel southPanel;//样式设置
	Font font;
	int boldStyle, italicStyle, underlineStyle;
	int fontSizeStyle;
	String fontNameStyle;
	Color colorStyle = Color.black;// 设置字体的默认颜色为黑色;
	String[] style = { '默认显示效果', 'Windows显示效果', 'Unix显示效果' };

	public ArtFont() {
		super('字体设置');
		// 设置默认字体
		boldStyle = 0;
		italicStyle = 0;
		underlineStyle = 0;
		fontSizeStyle = 10;
		fontNameStyle = '宋体';
		font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);

		northPanel = getNorthPanel();
		centerPanel = getCenterPanel();
		southPanel = getSouthPanel();
		// 设置容器;
		Container container = getContentPane();
		container.setLayout(new BorderLayout());
		//将northPanel添加到窗体的北部
		container.add(northPanel, BorderLayout.NORTH);
		//将centerPanel添加到窗体的中部
		container.add(centerPanel, BorderLayout.CENTER);
		//将southPanel添加到窗体的南部
		container.add(southPanel, BorderLayout.SOUTH);
		setSize(500, 300);
		//将窗体位于屏幕的中央
		setLocationRelativeTo(null);
		setVisible(true);	
	}	
	private JPanel getNorthPanel() {
		JPanel panel = new JPanel();		
		label = new JLabel('请输入文字:');
		inputText = new JTextField(20);
		boldBx = new JCheckBox('粗体');
		italicBx = new JCheckBox('斜体');
		colorBtn = new JButton('颜色');
		panel.add(label);
		panel.add(inputText);
		panel.add(boldBx);
		panel.add(italicBx);
		panel.add(colorBtn);
		//注册事件监视器
		inputText.addActionListener(this);
		boldBx.addItemListener(this);
		italicBx.addItemListener(this);
		colorBtn.addActionListener(this);
		return panel;
	}	
	private JPanel getCenterPanel() {
		JPanel panel = new JPanel();		
		txtArea = new JTextArea(10, 20);
		panel.setLayout(new BorderLayout());
		panel.add(new JScrollPane(txtArea), BorderLayout.CENTER);
		return panel;
	}	
	private JPanel getSouthPanel() {
		JPanel panel = new JPanel();		
		//获得系统默认字体
		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		fontNames = ge.getAvailableFontFamilyNames();
		fontType = new JComboBox(fontNames);
		//设置字体大小
		fontSizes = new String[63];
		for (int i = 0; i < fontSizes.length; i++) {
			fontSizes[i] = Integer.toString(i+10);
		}
		fontSize = new JComboBox(fontSizes);
		windowStyle = new JComboBox(style);
		panel.add(fontType);
		panel.add(fontSize);
		panel.add(windowStyle);
		//注册事件监视器
		fontType.addItemListener(this);
		fontSize.addItemListener(this);
		windowStyle.addItemListener(this);
		return panel;
	}
	@Override
	public void itemStateChanged(ItemEvent e) {
		if (e.getSource() == boldBx) {
			if (boldBx.isSelected()) {
				boldStyle = Font.BOLD;
			} else {
				boldStyle = 0;
			}
		} else if (e.getSource() == italicBx) {
			if (italicBx.isSelected()) {
				italicStyle = Font.ITALIC;
			} else {
				italicStyle = 0;
			}
		} else if (e.getSource() == fontType) {
			fontNameStyle = (String) e.getItem();
		} else if (e.getSource() == fontSize) {
			fontSizeStyle = Integer.parseInt((String) e.getItem());
		} else if (e.getSource() == windowStyle) {
			String s = (String) e.getItem();
			String className = '';
			if (s.equals('Windows显示效果'))
				className = 'com.sun.java.swing.plaf.windows.WindowsLookAndFeel';
			else if (s.equals('Unix显示效果'))
				className = 'com.sun.java.swing.plaf.motif.MotifLookAndFeel';
			else if (s.equals('默认显示效果'))
				className = UIManager.getCrossPlatformLookAndFeelClassName();
			try {
				UIManager.setLookAndFeel(className);
				SwingUtilities.updateComponentTreeUI(this);
			} catch (Exception de) {
				System.out.println('Exception happened!');
			}
		}
		font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);
		txtArea.setFont(font);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == inputText) {
			txtArea.append(inputText.getText() + '\n');
			inputText.setText('');
		} else if (e.getSource() == colorBtn) {
			Color color = JColorChooser.showDialog(this, '选择颜色', colorStyle);
			if (color != null) {
				colorStyle = color;
				colorBtn.setForeground(colorStyle);
				txtArea.setForeground(colorStyle);
			}
		}
	}
}

说明:

  • 该程序使用 Swing 组件来创建用户界面。
  • BorderLayout 布局管理器将窗口分为三个区域:北部、中部和南部。
  • 使用事件监听器来处理用户操作,例如按钮点击、下拉框选择等。
  • 通过设置字体属性(名称、大小、风格)来改变文本显示效果。
  • 使用 JColorChooser 来选择颜色。
  • 使用 UIManager 来更改窗体外观。

使用说明:

  1. 编译并运行程序。
  2. 在文本框中输入文字并回车,文字将显示在文本域中。
  3. 选择粗体或斜体复选框,文本域中的文字将相应地显示粗体或斜体。
  4. 点击颜色按钮,选择颜色,按钮和文本域的前景色将更改为所选颜色。
  5. 选择字体样式和字体大小下拉框,文本域中的文字将相应地显示。
  6. 选择窗体样式下拉框,窗体外观将相应地更改。

注意事项:

  • 程序运行需要 Java 环境支持。
  • 不同的操作系统可能显示不同的默认字体。
  • 代码中的字体名称和样式名称可能会因系统不同而有所差异。
Java图形用户界面设计:字体设置程序(ArtFont.java)

原文地址: https://www.cveoy.top/t/topic/no9b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录