关于swing中的基本组件(介绍及应用):

1.组件的介绍

1.JFrame	     一个普通的窗口,作为顶层容器
2.JDialog	     对话框
3.JPanel	     面板容器组件
4.JScrollPane	带滚动条的,可以水平和垂直滚动的面板组件
5.JMenuBar	    菜单栏
6.JPopupMenu	 弹出菜单
7.JLabel	    标签
8.JButton	    按钮
9.JRadioButton	单选按钮
10.	JCheckBox	复选框
11.JTextField	文本框
12.JTextArea	文本区域
13.JComboBox	下拉列表框
14.JList	    列表.
15.JRadioButtonMenuItem 是一个菜单项,它是一组菜单项的一部分,其中只能选择组中的一个项目。
16.ButtonGroup  按钮组

2.组件的建立

我们需要测试这些组件,就需要创建出来。
建立组件的代码:

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("复制",new ImageIcon("img\\1.jpg"));//图片太大,没有显示出来
    JMenuItem paste=new JMenuItem("黏贴");

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

    //声明文本域
    JTextArea ta=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);//复选框

    //声明底部
    JTextField tf=new JTextField(40);
    JButton ok=new JButton("确定",new ImageIcon("img\\1.jpg"));

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

    ButtonGroup poupButtonBg=new ButtonGroup();

    JRadioButtonMenuItem  metalItem=new JRadioButtonMenuItem("Metal风格");//单选菜单项
    JRadioButtonMenuItem  nimbusItem=new JRadioButtonMenuItem("Nimbus风格");
    JRadioButtonMenuItem windowsItem=new JRadioButtonMenuItem("Windows风格",true);//true是默认选中
    JRadioButtonMenuItem  windowsClassicItem=new JRadioButtonMenuItem("Windows经典风格");
    JRadioButtonMenuItem  motifItem=new JRadioButtonMenuItem("Motif风格");

3.改变界面风格

除了基本组件,还创建了一个改变界面风格的方法,改变风格放入右击菜单中,只需添加监听器就可以起到改变风格的作用:


//定义一个方法用于改变界面
    private  void changeFlavor(String command) throws Exception{
        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 "Windows经典风格":
                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);
    }

4.组装组件

创建组件过后我们需要组件起来,从小到大,一步步的来
组装代码:

 //初始化界面
    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(metalItem);
poupButtonBg.add(windowsClassicItem);
poupButtonBg.add(windowsItem);
poupButtonBg.add(nimbusItem);
poupButtonBg.add(motifItem  );

        ActionListener listener=new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //当前选择的是哪一个风格
                String actionCommand=e.getActionCommand();
                try {
                    changeFlavor(actionCommand);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };
metalItem.addActionListener(listener);
windowsClassicItem.addActionListener(listener);
windowsItem.addActionListener(listener);
nimbusItem.addActionListener(listener);
motifItem.addActionListener(listener);

        jPopupMenu.add(metalItem);
        jPopupMenu.add(windowsClassicItem);
        jPopupMenu.add(windowsItem);
        jPopupMenu.add(nimbusItem);
        jPopupMenu.add(motifItem);

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

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


    }

完整的代码:

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

public class SwingTest {
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("复制",new ImageIcon("img\\1.jpg"));//图片太大,没有显示出来
    JMenuItem paste=new JMenuItem("黏贴");

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

    //声明文本域
    JTextArea ta=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);//复选框

    //声明底部
    JTextField tf=new JTextField(40);
    JButton ok=new JButton("确定",new ImageIcon("img\\1.jpg"));

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

    ButtonGroup poupButtonBg=new ButtonGroup();

    JRadioButtonMenuItem  metalItem=new JRadioButtonMenuItem("Metal风格");//单选菜单项
    JRadioButtonMenuItem  nimbusItem=new JRadioButtonMenuItem("Nimbus风格");
    JRadioButtonMenuItem windowsItem=new JRadioButtonMenuItem("Windows风格",true);//true是默认选中
    JRadioButtonMenuItem  windowsClassicItem=new JRadioButtonMenuItem("Windows经典风格");
    JRadioButtonMenuItem  motifItem=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(metalItem);
poupButtonBg.add(windowsClassicItem);
poupButtonBg.add(windowsItem);
poupButtonBg.add(nimbusItem);
poupButtonBg.add(motifItem  );

        ActionListener listener=new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //当前选择的是哪一个风格
                String actionCommand=e.getActionCommand();
                try {
                    changeFlavor(actionCommand);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };
metalItem.addActionListener(listener);
windowsClassicItem.addActionListener(listener);
windowsItem.addActionListener(listener);
nimbusItem.addActionListener(listener);
motifItem.addActionListener(listener);

        jPopupMenu.add(metalItem);
        jPopupMenu.add(windowsClassicItem);
        jPopupMenu.add(windowsItem);
        jPopupMenu.add(nimbusItem);
        jPopupMenu.add(motifItem);

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

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


    }

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

//定义一个方法用于改变界面
    private  void changeFlavor(String command) throws Exception{
        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 "Windows经典风格":
                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);
    }

}

运行结果:

没有点击的界面:
在这里插入图片描述
右击并改变风格的图片:

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐