package com.one.basic;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SwingComponentDemo {
JFrame jf = new JFrame("测试swing基本组件");
//声明菜单相关组件
JMenuBar jMenuBar = new JMenuBar();
JMenu file = new JMenu("文件");
JMenu edit = new JMenu("编辑");
JMenuItem autoLinefeed = new JMenuItem("自动换行", new ImageIcon("C:\\Users\\lee\\IdeaProjects\\swing\\src\\img\\enter.png"));
JMenuItem copy = new JMenuItem("复制", new ImageIcon("C:\\Users\\lee\\IdeaProjects\\swing\\src\\img\\copy.png"));
JMenuItem paste = new JMenuItem("粘贴", new ImageIcon("C:\\Users\\lee\\IdeaProjects\\swing\\src\\img\\paste.png"));
JMenu format = new JMenu("格式");
JMenuItem comment = new JMenuItem("注释", new ImageIcon("C:\\Users\\lee\\IdeaProjects\\swing\\src\\img\\comment.png"));
JMenuItem uncomment = new JMenuItem("取消注释", new ImageIcon("C:\\Users\\lee\\IdeaProjects\\swing\\src\\img\\uncomment.png"));
//声明文本域
JTextArea jTextArea = new JTextArea(8, 20);
//声明颜色列表框
String[] colors = {"红色", "绿色", "蓝色"};
JList<String> colorList = new JList<>(colors);
// 声明选择相关组件,下拉选择框,单选框,复选框。
JComboBox<String> colorSelect = new JComboBox<>();
ButtonGroup bg = new ButtonGroup();
JRadioButton male = new JRadioButton("男", false);
JRadioButton female = new JRadioButton("女", true);
JCheckBox isMarried = new JCheckBox("是否已婚", true);
// 声明右键菜单,单选菜单
JPopupMenu jPopupMenu = new JPopupMenu();
ButtonGroup bg1 = new ButtonGroup();
JRadioButtonMenuItem metal = new JRadioButtonMenuItem("Metal风格");
JRadioButtonMenuItem niubus = new JRadioButtonMenuItem("Niubus风格");
JRadioButtonMenuItem windows = new JRadioButtonMenuItem("Windows风格", true);
JRadioButtonMenuItem windowsClassic = new JRadioButtonMenuItem("WindowsClassic经典风格");
JRadioButtonMenuItem motif = new JRadioButtonMenuItem("Motif风格");
//声明底部
JTextField tf = new JTextField(40);
JButton ok = new JButton("确定", new ImageIcon("C:\\Users\\lee\\IdeaProjects\\swing\\src\\img\\ok.png"));
// 初始化界面
public void init() {
//组装视图
// 组装底部
JPanel bottomPanel = new JPanel();
bottomPanel.add(tf);
bottomPanel.add(ok);
jf.add(bottomPanel, BorderLayout.SOUTH);
// 组装选择相关的组件
JPanel selectPanel = new JPanel();
colorSelect.addItem("红色");
colorSelect.addItem("绿色");
colorSelect.addItem("蓝色");
selectPanel.add(colorSelect);
bg.add(male);
bg.add(female);
selectPanel.add(male);
selectPanel.add(female);
selectPanel.add(isMarried);
//组装文本域和选择相关组件
Box topLeft = Box.createVerticalBox();
topLeft.add(jTextArea);
topLeft.add(selectPanel);
//组装顶部
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
jf.add(top);
//组装顶部菜单
format.add(comment);
format.add(uncomment);
edit.add(autoLinefeed);
edit.addSeparator();
edit.add(copy);
edit.add(paste);
edit.addSeparator();
edit.add(format);
jMenuBar.add(file);
jMenuBar.add(edit);
jf.setJMenuBar(jMenuBar);
// 组装右键菜单
bg1.add(metal);
bg1.add(niubus);
bg1.add(windows);
bg1.add(windowsClassic);
bg1.add(motif);
//增加监听器,改变界面显示风格
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
try {
changeFlavor(actionCommand);
} catch (Exception exception) {
exception.printStackTrace();
}
}
};
metal.addActionListener(listener);
niubus.addActionListener(listener);
windows.addActionListener(listener);
windowsClassic.addActionListener(listener);
motif.addActionListener(listener);
jPopupMenu.add(metal);
jPopupMenu.add(niubus);
jPopupMenu.add(windows);
jPopupMenu.add(windowsClassic);
jPopupMenu.add(motif);
// 不需要再监听鼠标事件
jTextArea.setComponentPopupMenu(jPopupMenu);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// 定义一个方法,用于改善界面风格
private void changeFlavor(String command) throws Exception {
switch (command) {
case "Metal风格":
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case "Niubus风格":
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
break;
case "Windows风格":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case "WindowsClassic经典风格":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
break;
case "Motif风格":
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
// 刷新组件的外观
SwingUtilities.updateComponentTreeUI(jf.getContentPane());
SwingUtilities.updateComponentTreeUI(jMenuBar);
SwingUtilities.updateComponentTreeUI(jPopupMenu);
}
public static void main(String[] args) {
new SwingComponentDemo().init();
}
}