题目来源:大工慕课 链接
作者: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);
}
}