swing(一)

目录

前言:

目标:

 实现:

     导入包:

   组件文本准备:

        风格改变类:

总代码:

附录:



前言:

        关于Swing进行一些创作和样品设计,不过笔者还是更加推荐去网上寻找一些视频教程,这里直接看代码的话会比较的蒙,建议初学者以视频讲解类的内容为主。

目标:

下图是使用以下代码实现的成品结构图。

 实现:

     导入包:

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

   组件文本准备:

        创建相关的容器主键,这里文本中有了一定的注释,具体还有那里不懂可以私聊笔者进行询问。

JFrame f = new JFrame("测试Swing基本操作");

    //声明菜单相关的组件
    JMenuBar menuBar = new JMenuBar();

    // 创建组件
    JMenu fileMenu = new JMenu("文件");
    JMenu editMenu = new JMenu("编辑");

    JMenuItem auto = new JMenuItem("字动换行");
    JMenuItem copy = new JMenuItem("复制");
    JMenuItem paste = new JMenuItem("粘贴");

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

    // 声明文本域   8行20列
    JTextArea ta = new JTextArea(8,20);

    String[] colors= {"红色","绿色","蓝色"};

    // 声明列表框
    JList<String> colorList = new JList<String>(colors);

    // 声明选择相关组件
    JComboBox<String> colorSelect = new JComboBox<String>();

    // 设置男女按钮  默认选中女
    ButtonGroup bg = new ButtonGroup();
    JRadioButton male = new JRadioButton("男",false);
    JRadioButton female = new JRadioButton("女",true);

    // 设置结婚勾选方框,默认勾选
    JCheckBox isMarried = new JCheckBox("是否已婚?",true);

    // 声明底部
    // 文本框
    JTextField tf = new JTextField(40);
    // 确定按钮
    JButton ok = new JButton("确定");

    // 声明右键菜单
    JPopupMenu JPopupMenu = new JPopupMenu();

    // 按钮组(右击)
    ButtonGroup poupButtonBg = new ButtonGroup();

    JRadioButtonMenuItem metal = new JRadioButtonMenuItem("Metal 风格");
    JRadioButtonMenuItem nimbus = new JRadioButtonMenuItem("Nimbus 风格");
    JRadioButtonMenuItem windows = new JRadioButtonMenuItem("Windows 风格");
    JRadioButtonMenuItem windowsClassic = new JRadioButtonMenuItem("WindowsClassic 风格");
    JRadioButtonMenuItem motif = new JRadioButtonMenuItem("Motif 风格");

        初始化界面:

        初始化界面也就是对组件进行一定的封装,将小的组件封装到容器中并实现。

// 组装视图

        // 组装底部
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(tf);
        bottomPanel.add(ok);

        f.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(ta);
        topLeft.add(selectPanel);

        // 组装顶部
        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);

        f.add(top);

        // 组装顶部菜单
        formatMenu.add(comment);
        formatMenu.add(cancelComment);

        editMenu.add(auto);
        // 分割线添加方式
        editMenu.addSeparator();
        editMenu.add(copy);
        editMenu.add(paste);
        editMenu.addSeparator();
        editMenu.add(formatMenu);

        // 往菜单中加入文件和编辑组件
        menuBar.add(fileMenu);
        menuBar.add(editMenu);

        f.setJMenuBar(menuBar);

        //组装右键菜单
        poupButtonBg.add(metal);
        poupButtonBg.add(nimbus);
        poupButtonBg.add(windows);
        poupButtonBg.add(windowsClassic);
        poupButtonBg.add(motif);


        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //当前选择的是哪一个风格
                String actionCommand = e.getActionCommand();
                try {
                    changeFlavor(actionCommand);
                } catch (UnsupportedLookAndFeelException | IllegalAccessException | InstantiationException | ClassNotFoundException ex) {
                    ex.printStackTrace();
                }
            }
        };


        metal.addActionListener(listener);
        nimbus.addActionListener(listener);
        windows.addActionListener(listener);
        windowsClassic.addActionListener(listener);
        motif.addActionListener(listener);

        JPopupMenu.add(metal);
        JPopupMenu.add(nimbus);
        JPopupMenu.add(windows);
        JPopupMenu.add(windowsClassic);
        JPopupMenu.add(motif);

        // 不需要在监听鼠标事件了
        ta.setComponentPopupMenu(JPopupMenu);


        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);

        风格改变类:

        这里是改变窗口风格,这里需要死记硬背记住格式,每个风格后边的都不相同。

public void changeFlavor(String command) throws UnsupportedLookAndFeelException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        switch (command){
            case "Metal 风格":
                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                break;
            case "Nimbus 风格":
                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(f.getContentPane());
        SwingUtilities.updateComponentTreeUI(menuBar);
        SwingUtilities.updateComponentTreeUI(JPopupMenu);

    }

总代码:

接下来就是完整的代码实现了

package com.swing01;

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

public class Demo01 {
    JFrame f = new JFrame("测试Swing基本操作");

    //声明菜单相关的组件
    JMenuBar menuBar = new JMenuBar();

    // 创建组件
    JMenu fileMenu = new JMenu("文件");
    JMenu editMenu = new JMenu("编辑");

    JMenuItem auto = new JMenuItem("字动换行");
    JMenuItem copy = new JMenuItem("复制");
    JMenuItem paste = new JMenuItem("粘贴");

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

    // 声明文本域   8行20列
    JTextArea ta = new JTextArea(8,20);

    String[] colors= {"红色","绿色","蓝色"};

    // 声明列表框
    JList<String> colorList = new JList<String>(colors);

    // 声明选择相关组件
    JComboBox<String> colorSelect = new JComboBox<String>();

    // 设置男女按钮  默认选中女
    ButtonGroup bg = new ButtonGroup();
    JRadioButton male = new JRadioButton("男",false);
    JRadioButton female = new JRadioButton("女",true);

    // 设置结婚勾选方框,默认勾选
    JCheckBox isMarried = new JCheckBox("是否已婚?",true);

    // 声明底部
    // 文本框
    JTextField tf = new JTextField(40);
    // 确定按钮
    JButton ok = new JButton("确定");

    // 声明右键菜单
    JPopupMenu JPopupMenu = new JPopupMenu();

    // 按钮组(右击)
    ButtonGroup poupButtonBg = new ButtonGroup();

    JRadioButtonMenuItem metal = new JRadioButtonMenuItem("Metal 风格");
    JRadioButtonMenuItem nimbus = new JRadioButtonMenuItem("Nimbus 风格");
    JRadioButtonMenuItem windows = new JRadioButtonMenuItem("Windows 风格");
    JRadioButtonMenuItem windowsClassic = new JRadioButtonMenuItem("WindowsClassic 风格");
    JRadioButtonMenuItem motif = new JRadioButtonMenuItem("Motif 风格");




    //初始化界面
    public void init(){
        // 组装视图

        // 组装底部
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(tf);
        bottomPanel.add(ok);

        f.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(ta);
        topLeft.add(selectPanel);

        // 组装顶部
        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);

        f.add(top);

        // 组装顶部菜单
        formatMenu.add(comment);
        formatMenu.add(cancelComment);

        editMenu.add(auto);
        // 分割线添加方式
        editMenu.addSeparator();
        editMenu.add(copy);
        editMenu.add(paste);
        editMenu.addSeparator();
        editMenu.add(formatMenu);

        // 往菜单中加入文件和编辑组件
        menuBar.add(fileMenu);
        menuBar.add(editMenu);

        f.setJMenuBar(menuBar);

        //组装右键菜单
        poupButtonBg.add(metal);
        poupButtonBg.add(nimbus);
        poupButtonBg.add(windows);
        poupButtonBg.add(windowsClassic);
        poupButtonBg.add(motif);


        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //当前选择的是哪一个风格
                String actionCommand = e.getActionCommand();
                try {
                    changeFlavor(actionCommand);
                } catch (UnsupportedLookAndFeelException | IllegalAccessException | InstantiationException | ClassNotFoundException ex) {
                    ex.printStackTrace();
                }
            }
        };


        metal.addActionListener(listener);
        nimbus.addActionListener(listener);
        windows.addActionListener(listener);
        windowsClassic.addActionListener(listener);
        motif.addActionListener(listener);

        JPopupMenu.add(metal);
        JPopupMenu.add(nimbus);
        JPopupMenu.add(windows);
        JPopupMenu.add(windowsClassic);
        JPopupMenu.add(motif);

        // 不需要在监听鼠标事件了
        ta.setComponentPopupMenu(JPopupMenu);


        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);

    }

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

    public void changeFlavor(String command) throws UnsupportedLookAndFeelException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        switch (command){
            case "Metal 风格":
                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                break;
            case "Nimbus 风格":
                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(f.getContentPane());
        SwingUtilities.updateComponentTreeUI(menuBar);
        SwingUtilities.updateComponentTreeUI(JPopupMenu);

    }

}

这个代码可以直接拿出来进行使用。关于事件的监听尚未实现,读者可以根据自己的需求对监听进行实现。

附录:

        在创建对象是可以添加图片使其作为添加组件的图片,比如确认按钮,JButton ok = new JButton("确定");要给它添加图片标识只需要在创建时只需要加入图片地址即可,例如:JButton ok = new JButton("确定",“图片的地址”)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的喵星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值