Java:实现一个能够改变显示单词的字体风格和大小的GUI【V2】(第十四周)

本文详细介绍如何使用Java Swing库创建一个包含输入菜单、编辑菜单和工具栏的图形用户界面。通过实例代码,展示了如何实现字体大小、样式调整,以及文本输入和颜色选择等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目来源:大工慕课 链接
作者:Caleb Sung

题目要求

Implement a GUI as shown in the following figure:
这里写图片描述
Input Menu:
这里写图片描述
这里写图片描述
这里写图片描述
Edit Menu:
这里写图片描述
这里写图片描述
Tool Bar:
这里写图片描述


参考解答

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToolBar;

public class TestFontGUI {
    public static void main(String[] args) {
        new FontGUI();
    }
}

@SuppressWarnings("serial")
class FontGUI extends JFrame {

    int fontSize;
    JLabel label = new JLabel("The quick brown fox jumps over the lazy dog.");
    JRadioButtonMenuItem largeItem = new JRadioButtonMenuItem("Large");
    JRadioButtonMenuItem mediumItem = new JRadioButtonMenuItem("Medium");
    JRadioButtonMenuItem smallItem = new JRadioButtonMenuItem("Small");
    JCheckBoxMenuItem boldItem = new JCheckBoxMenuItem("Bold");
    JCheckBoxMenuItem italicItem = new JCheckBoxMenuItem("Italic");
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    String input;

    public FontGUI() {

        setTitle("Menu Test Frame");
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        label.setFont(new Font("Serif", Font.PLAIN, 25));
        add(label, BorderLayout.CENTER);

        JMenuBar mb = new JMenuBar();
        setJMenuBar(mb);

        JMenu inputMenu = new JMenu("Input");
        mb.add(inputMenu);

        JMenuItem newItem = new JMenuItem("New");
        inputMenu.add(newItem);

        newItem.addActionListener(e -> {
            input = JOptionPane.showInputDialog("Type here:");
            if (input == null) {
                JOptionPane.showConfirmDialog(null, "You must input something in this textbox!", "Attention",
                        JOptionPane.DEFAULT_OPTION);
                input = "The quick brown fox jumps over the lazy dog.";
            } else if (input.length() <= 4) {
                JOptionPane.showConfirmDialog(null, "The length of your input should be longer than 4 charactors!",
                        "Attention", JOptionPane.DEFAULT_OPTION);
                input = "The quick brown fox jumps over the lazy dog.";
            } else
                label.setText(input);
            pack();
            setLocation(screenSize.width / 2 - getSize().width / 2, screenSize.height / 2 - getSize().height / 2);
        });

        JToolBar tb = new JToolBar();
        JButton redButton = new JButton(new ImageIcon("red-ball.gif"));
        tb.add(redButton);
        JButton greenButton = new JButton(new ImageIcon("green-ball.gif"));
        tb.add(greenButton);
        JButton blueButton = new JButton(new ImageIcon("blue-ball.gif"));
        tb.add(blueButton);
        add(tb, BorderLayout.NORTH);

        redButton.addActionListener(e -> label.setForeground(Color.RED));
        greenButton.addActionListener(e -> label.setForeground(Color.GREEN));
        blueButton.addActionListener(e -> label.setForeground(Color.BLUE));

        JMenu editMenu = new JMenu("Edit");
        mb.add(editMenu);

        JMenu colorMenu = new JMenu("Color");
        editMenu.add(colorMenu);

        JMenuItem redItem = new JMenuItem("Red");
        JMenuItem greenItem = new JMenuItem("Green");
        JMenuItem blueItem = new JMenuItem("Blue");

        colorMenu.add(redItem);
        colorMenu.add(greenItem);
        colorMenu.add(blueItem);

        redItem.addActionListener(e -> label.setForeground(Color.RED));
        greenItem.addActionListener(e -> label.setForeground(Color.GREEN));
        blueItem.addActionListener(e -> label.setForeground(Color.BLUE));

        JMenu fontMenu = new JMenu("Font");
        editMenu.add(fontMenu);

        fontMenu.add(boldItem);
        fontMenu.add(italicItem);

        ButtonGroup bg = new ButtonGroup();
        bg.add(smallItem);
        bg.add(mediumItem);
        bg.add(largeItem);
        fontMenu.add(smallItem);
        fontMenu.add(mediumItem);
        fontMenu.add(largeItem);

        smallItem.setSelected(true);

        boldItem.addActionListener(e -> {
            changeFont();
        });
        italicItem.addActionListener(e -> {
            changeFont();
        });
        smallItem.addActionListener(e -> {
            changeFont();
        });
        mediumItem.addActionListener(e -> {
            changeFont();
        });
        largeItem.addActionListener(e -> {
            changeFont();
        });

        pack();
        setLocation(screenSize.width / 2 - getSize().width / 2, screenSize.height / 2 - getSize().height / 2);
    }

    void changeFont() {
        int mode = Font.PLAIN;
        if (boldItem.isSelected())
            mode += Font.BOLD;
        if (italicItem.isSelected())
            mode += Font.ITALIC;
        if (smallItem.isSelected())
            fontSize = 25;
        else if (mediumItem.isSelected())
            fontSize = 40;
        else if (largeItem.isSelected())
            fontSize = 60;
        label.setFont(new Font("Serif", mode, fontSize));
        pack();
        validate();
        setLocation(screenSize.width / 2 - getSize().width / 2, screenSize.height / 2 - getSize().height / 2);
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值