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

这篇博客详细介绍了Java Swing中的基本组件,包括JFrame、JDialog、JPanel、JScrollPane等,并展示了如何创建和使用这些组件。通过实例代码,演示了菜单栏、弹出菜单、文本域、下拉列表框等组件的搭建,同时提供了改变界面风格的方法,如Metal、Nimbus等。此外,还实现了右键菜单功能,允许用户在文本域上右击选择不同界面风格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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);
    }

}

运行结果:

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yjg_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值