【Java-GUI】07 Swing01 入门案例

Swing是Java自己开发出的一套GUI组件,不同于AWT去调用操作系统的GUI

正是因为非系统平台的GUI,所以程序运行的要慢一些

涉及的设计模式:MVC模式

Model(组件对象状态)

View(组件可视化表现)

Controller(组件的事件行为)

类体系:

java.awt.Component
    |
java.awtContainer
    |
java.swing.JComponent
    |
java.swing.Jxxxx(各种组件的具体类)

演示案例:

package cn.dzz.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Demo01 {

    JFrame jFrame = new JFrame("Swing");

    JMenuBar jmenuBar = new JMenuBar();

    JMenu fileJMenu = new JMenu("文件");
    JMenu editJMenu = new JMenu("编辑");
    JMenuItem autoNextLine = new JMenuItem("自动换行");
    // JMenuItem copy = new JMenuItem("复制")
    JMenuItem copy = new JMenuItem("复制", new ImageIcon("img/icon01.png"));
    JMenuItem paste = new JMenuItem("粘贴", new ImageIcon("img/icon01.png"));

    JMenu formatJMenu = new JMenu("格式");
    JMenuItem comment = new JMenuItem("注释");
    JMenuItem cancelComment = new JMenuItem("取消注释");

    // 文本域
    JTextArea jTextArea = new JTextArea(8,20);
    // 列表框
    String[] colorList = {
            "红色",
            "绿色",
            "蓝色",
    };
    JList<String> jList = new JList<>(colorList);
    // 下拉选择框
    JComboBox<String> jComboBox = new JComboBox<>();
    // 单选
    ButtonGroup buttonGroup = new ButtonGroup();
    JRadioButton male = new JRadioButton("男性", true);
    JRadioButton female = new JRadioButton("女性", false);
    // 复选框
    JCheckBox isMarry = new JCheckBox("是否已婚", true);

    // 底部
    JTextField jTextField = new JTextField(20);
    JButton ok = new JButton("确定", new ImageIcon("img/icon02.png"));
    // 风格设置
    JPopupMenu styleMenu = new JPopupMenu();
    ButtonGroup styleGroup = new ButtonGroup();
    JRadioButtonMenuItem metal = new JRadioButtonMenuItem("Metal-Style");
    JRadioButtonMenuItem nimbus = new JRadioButtonMenuItem("Nimbus-Style");
    JRadioButtonMenuItem windows = new JRadioButtonMenuItem("Windows-Style");
    JRadioButtonMenuItem classicWindows = new JRadioButtonMenuItem("ClassicWindows-Style");
    JRadioButtonMenuItem motif = new JRadioButtonMenuItem("Motif-Style");

    public void init() {
        
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(jTextField);
        bottomPanel.add(ok);
        jFrame.add(bottomPanel, BorderLayout.SOUTH);

        JPanel selectPanel = new JPanel();

        jComboBox.addItem("red");
        jComboBox.addItem("green");
        jComboBox.addItem("blue");
        selectPanel.add(jComboBox);

        buttonGroup.add(male);
        buttonGroup.add(female);
        selectPanel.add(male);
        selectPanel.add(female);
        selectPanel.add(isMarry);

        Box leftBox = Box.createVerticalBox();
        leftBox.add(jTextArea);
        leftBox.add(selectPanel);

        Box topBox = Box.createHorizontalBox();
        topBox.add(leftBox);
        topBox.add(jList);
        jFrame.add(topBox);

        // 顶部菜单设置
        formatJMenu.add(comment);
        formatJMenu.add(cancelComment);

        editJMenu.add(autoNextLine);
        editJMenu.addSeparator(); // 分割线
        editJMenu.add(copy);
        editJMenu.add(paste);
        editJMenu.addSeparator(); // 分割线
        editJMenu.add(formatJMenu);

        jmenuBar.add(fileJMenu);
        jmenuBar.add(editJMenu);

        jFrame.setJMenuBar(jmenuBar);

        styleMenu.add(metal);
        styleMenu.add(nimbus);
        styleMenu.add(windows);
        styleMenu.add(classicWindows);
        styleMenu.add(motif);

        // 事件监听
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String actionCommand = e.getActionCommand();
                try {
                    changeStyle(actionCommand);
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            }
        };
        metal.addActionListener(actionListener);
        nimbus.addActionListener(actionListener);
        windows.addActionListener(actionListener);
        classicWindows.addActionListener(actionListener);
        motif.addActionListener(actionListener);

        // 设置进按钮组中。表示只能选中一个选项
        styleGroup.add(metal);
        styleGroup.add(nimbus);
        styleGroup.add(windows);
        styleGroup.add(classicWindows);
        styleGroup.add(motif);

        jTextArea.setComponentPopupMenu(styleMenu);

        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.pack();
        jFrame.setVisible(true);
    }

    private void changeStyle(String command)  throws Exception {
        switch (command) {
            case "Metal-Style":
                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                break;
            case "Nimbus-Style":
                UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
                break;
            case "Windows-Style":
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                break;
            case "ClassicWindows-Style":
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
                break;
            case "Motif-Style":
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                break;
        }
        // 更新界面风格
        SwingUtilities.updateComponentTreeUI(jFrame.getContentPane());
        SwingUtilities.updateComponentTreeUI(jmenuBar);
        SwingUtilities.updateComponentTreeUI(styleMenu);
    }


    public static void main(String[] args) {
        new Demo01().init();
    }
}

  

效果预览:

风格选择:

编辑菜单:

 

posted @ 2021-02-11 15:08  emdzz  阅读(187)  评论(0编辑  收藏  举报