swing组件应用

该博客围绕Java Swing组件展开,介绍了组件分类,包括顶层容器、中间容器和基本组件。详细阐述了如JFrame、JDialog、JPanel等36种组件的功能,如JFrame可最大化、最小化和关闭,JPanel可组合控件等,并给出了各组件的使用示例。

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

 1. 组件概述

(1) 说明

        组件组成Java 的图形界面的各个元素,按照不同的功能,可分为 顶层容器中间容器基本组件。顶层容器为java.awt.Window的子类,有JFrame、JDialog等。中间容器和基础组件都为javax.swing.JComponent的子类,常用的中间容器有JPanel、ScrollPane、JSplitPane、JTabbedPane、JLayeredPane、JMenuBar、JToolBar、JPopupMenu、JInternalFrame等,常用的基础组件有JLabel、JButton、JRadioButton、JCheckBox、JToggleButton、JTextField、JPasswordField、JTextArea、JComboBox、JList、JProgressBar、JSlider等。

2. JFrame - 窗体

(1) 说明

        一个顶层的框架类,是屏幕上window的对象,能够最大化、最小化、关闭。JFrame好比窗户框,其他容器(例如JPanel )就是玻璃。

(2)示例

1        JFrame jFrame = new JFrame();
        //设置窗口大小,也可通过setBounds设置位置和大小,可以使用pack方法设置最佳大小。
        jFrame.setSize(1000, 800);
        //窗口居中显示,也可通过setLocation或setBounds方法设置显示位置。
        jFrame.setLocationRelativeTo(null);
        //标题
        jFrame.setTitle("标题");
        //图标
        jFrame.setIconImage(null);
        //设置默认窗口关闭操作,常用直接退出程序
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //菜单栏加到窗口中
        jFrame.setJMenuBar(ModuleUtils.initJMenuBar());
        //设置窗口是否可调整大小,默认窗口可调整大小
        jFrame.setResizable(false);
        //撤销当前窗口并释放所有使用的资源,可用于页面跳转关闭当前窗口
        //jFrame.dispose();
        //往窗口中添加组件,JFrame默认为边界布局,可分别往上下左右中5部分添加组件
        jFrame.add(new JLabel("组件"), BorderLayout.WEST);
        //设置窗口是否可见,默认窗口是不可见的
        jFrame.setVisible(true);

3. JDialog - 对话框

(1) 说明
        主要用于一个窗体中弹到另一个窗体中。

(2) 示例

        JButton jButton=new JButton("弹框");
        jButton.setSize(100,50);
        jButton.addActionListener(e->{
            //模态对话框,在不处理当前对话框之前无法进行其他操作。
            JDialog dialog = new JDialog(jFrame,"对话框",true);
            dialog.setSize(200, 300);//设置其大小
            dialog.setLocation(100, 100);//设置其位置
            dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);//设置关闭模式
            dialog.add(new JTextField());//设置组件
            dialog.setVisible(true);//设置可见
        });

4. JApplet - applet框

(1) 说明

        JApplet 类是用来建立 java 小应用程序用的。

(2) 示例

5. JPanel - 面板

(1) 说明

        JPanel 是 Java图形界面的面板容器类,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,功能是对窗体上的各种控件进行组合。

(2) 示例

        //新建面板
        JPanel jPanel=new JPanel();
        jPanel.setBounds(50,50,300,200);//在指定位置和大小,绝对布局有效
        jPanel.setLayout(new FlowLayout(FlowLayout.LEFT));//设置布局,默认为居中流布局
        jPanel.setBackground(Color.BLUE); //设置背景色
        jPanel.add(new JButton("按钮"));//添加组件
        jPanel.setBorder(BorderFactory.createLineBorder(Color.RED,2));//设置边框

6. JScrollPane - 滚动面板

(1) 说明

        JScrollPane是一个带有滚动条的面板,面板上只能添加一个组件。如果想向JScrollPane面板中添加多个组件,应该先将多个组件添加到某个组件中,然后将这个组件添加到JScrollPane中。

(2) 示例

        //新建面板
        JScrollPane jScrollPane=new JScrollPane ();
        //新建组件,滚动面板需要展示的组件
        JPanel jPanel=new JPanel();
        jPanel.setPreferredSize(new Dimension(500,1000));
        jScrollPane.setBounds(50,50,300,200);//在指定位置和大小,绝对布局有效
        jScrollPane.setViewportView(jPanel);//滚动面板展示的组件组件
        jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//设置水平滚动条策略
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//设置垂直滚动条策略
        jScrollPane.setBorder(BorderFactory.createLineBorder(Color.RED,2));//设置边框
        jFrame.add(jScrollPane);

7. JLayeredPane - 分层面板

(1) 说明

        为容器添加了深度,允许组件在需要时互相重叠。

(2) 示例

        //新建面板
        JLayeredPane  jLayeredPane=new JLayeredPane ();
        jLayeredPane.setLayout(null);
        //新建组件,滚动面板需要展示的组件
        JPanel jPanel1=new JPanel();
        jPanel1.setBounds(10,10,100,100);
        jPanel1.setBackground(Color.BLUE);
        JPanel jPanel2=new JPanel();
        jPanel2.setBounds(60,60,100,100);
        jPanel2.setBackground(Color.RED);
        JPanel jPanel3=new JPanel();
        jPanel3.setBounds(110,110,100,100);
        jPanel3.setBackground(Color.GREEN);
        //可设置组件层级,最大数的组件在最外层.默认放到层内最底部
        jLayeredPane.add(jPanel1,new Integer(2));
        jLayeredPane.add(jPanel2,new Integer(3));
        jLayeredPane.add(jPanel3,new Integer(1));
        jFrame.add(jLayeredPane);

8. JRootPane - 根面板

(1) 说明

        该面板是在 JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。根面板默认是不可见的。根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。

(2) 示例

9. JInternalPane - 内部窗口

(1) 说明

(2) 示例

10. JTabbedPane - 选项卡窗格

(1) 说明

        JTabbedPane可以用于创建具有多个功能选项卡的应用程序界面,每个选项卡都有一个标题和一个面板,用户可以点击选项卡来切换到相应的面板。

(2) 示例

        JPanel jPanel1 = new JPanel();//选项卡1容器
        JPanel jPanel2 = new JPanel();//选项卡2容器
        //定义选项卡,可设置选项卡标签位置及布局策略。默认:TOP, WRAP_TAB_LAYOUT
        JTabbedPane jTabbedPane=new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
        //添加选项卡
        jTabbedPane.addTab("选项卡1",jPanel1);
        jTabbedPane.addTab("选项卡2",jPanel2);
        jTabbedPane.setSelectedIndex(1); // 设置指定索引选项卡被选中
        jTabbedPane.setEnabledAt(0, false); // 设置指定索引选项卡不可用
        jTabbedPane.addChangeListener(e->{//切换事件
            // 获得被选中选项卡的索引
            int selectedIndex = jTabbedPane.getSelectedIndex();
            // 获得指定索引的选项卡标签
            String title = jTabbedPane.getTitleAt(selectedIndex);
            System.out.println(title);
        });
        jFrame.add(jTabbedPane);

11. JSplitPane - 分割面板

(1) 说明

        JSplitPane 用于创建可拖动的分割面板,将一个容器分割为两个可调整大小的子面板。它提供了用户界面中显示和控制两个组件的分割线,可以让用户根据需要调整两个子面板的大小。

(2) 示例

        JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JLabel("左"),new JLabel("右"));
        jSplitPane.setPreferredSize(new Dimension(100,100));
        jSplitPane.setContinuousLayout(false);//设置是否连续重新显示组件,
        jSplitPane.setDividerSize(10);//分割线宽度
        jSplitPane.setDividerLocation(30);
        //jSplitPane.setLeftComponent(Componentcomp); //将组件设置到分隔条的左边。
        //jSplitPane.setTopComponent(Component comp);// 将组件设置到分隔条的上面。
        //jSplitPane.setRightComponent(Component comp);//将组件设置到分隔条的右边。
        //jSplitPane.setBottomComponent(Component comp);//将组件设置到分隔条的下面。

12. JMenuBar - 菜单栏

(1) 说明

        JMenuBar是用于制作菜单栏时用到的一个组件。菜单组件是由多个类组成的,主要有:JMenuBar(菜单栏)、JMenu(菜单)、JMenuItem(菜单项)和JPopupMenu(弹出菜单).每个菜单组件都包含一个菜单栏,每个菜单栏又包含若干个菜单,每个菜单包含若干个菜单项。菜单项的作用与按钮类似,当用户单击时产生一个命令动作。

(2) 示例

        JMenuBar jMenuBar=new JMenuBar(); //创建菜单栏
        JMenu jMenu1=new JMenu("一级菜单");
        JMenu jMenu2=new JMenu("二级菜单");
        JMenuItem jMenuItem=new JMenuItem("菜单项");
        jMenuItem.addActionListener(e->{
            //TODO 菜单项点击事件
        });
        jMenu1.add(jMenu2);//一级菜单添加二级菜单
        jMenu2.add(jMenuItem);//二级菜单添加菜单项
        jMenuBar.add(jMenu1);//菜单栏添一级加菜单
        jFrame.setJMenuBar(jMenuBar);//在窗口里添加菜单栏
        //复选框、单选框菜单项
        JMenu jMenu=new JMenu("菜单");
        JCheckBoxMenuItem jCheckBoxMenuItem=new JCheckBoxMenuItem("复选框");
        JRadioButtonMenuItem jRadioButtonMenuItem=new JRadioButtonMenuItem("单选框");
        JMenuItem jMenuItem=new JMenuItem("按钮");
        jMenu.add(jCheckBoxMenuItem);
        jMenu.add(jRadioButtonMenuItem);
        jMenu.add(jMenuItem);
        jMenuBar.add(jMenu);
        jPanel.add(jMenuBar);

13. JPopupMenu - 弹出式菜单

(1) 说明

        弹出菜单是非常常见的一种控件。它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”、“属性”等菜单的弹出菜单。

(2) 示例

        JPanel jPanel=new JPanel();
        //弹框菜单
        JPopupMenu jPopupMenu = new JPopupMenu("Edit");
        //添加菜单及菜单项,中间都为菜单,最后一级为菜单项,可绑定事件
        JMenu jMenu=new JMenu("粘贴");
        JMenuItem jMenuItem1 = new JMenuItem("复制");
        JMenuItem jMenuItem2 = new JMenuItem("粘贴文本");
        JMenuItem jMenuItem3 = new JMenuItem("粘贴原格式文本");
        jMenu.add(jMenuItem2);
        jMenu.add(jMenuItem3);
        jPopupMenu.add(jMenuItem1);
        jPopupMenu.add(jMenu);
        //为窗口添加鼠标事件,点击右键在点击位置显示弹框菜单
        jFrame.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if(e.getButton()==MouseEvent.BUTTON3){//鼠标点击右键
                     //在点击位置弹出菜单
                    jPopupMenu.show(jFrame,e.getX(),e.getY());
                }
            }
        });
        //添加到指定容器
       jPanel.add(jPopupMenu);

14 JToolBar - 工具栏

(1) 说明

        JToolBar 提供了一个用来显示常用的控件(按钮)的组件,而且可以在程序的主窗口之外浮动或是托拽。

(2) 示例

        //创建工具条,设置名称、方向。
        JToolBar jToolBar=new JToolBar("工具条",SwingConstants.HORIZONTAL);
        jToolBar.add(new JButton("功能1"));
        jToolBar.addSeparator();设置分隔
        jToolBar.add(new JButton("功能2"));
        jToolBar.setBackground(Color.lightGray);//背景色

15. JLabel - 标签

(1) 说明

        JLabel组件用来显示文本和图像,可以只显示其一种,也可以同时显示。

(2) 示例

        JLabel jLabel = new JLabel("内容");
        jLabel.setSize(400,300);
        BufferedImage img = ImageIO.read(new File("D:\\pictures\\12.jpg"));
        Image image = img.getScaledInstance(jLabel.getWidth(), jLabel.getHeight(), Image.SCALE_SMOOTH);
        jLabel.setIcon(new ImageIcon(image));//设置和JLabel等大的图片
        jLabel.setForeground (Color.BLUE);//设置字体颜色
        jLabel.setFont (new Font("宋体", Font.BOLD, 30));//设置字体风格、大小
        jLabel.setBorder (BorderFactory.createLineBorder(Color.GREEN));//设置组件JLabel标签的边框线
        jLabel.setCursor (new Cursor(Cursor.HAND_CURSOR));//设置当鼠标触碰标签时,鼠标的样式。
        jLabel.setOpaque (true);//关闭透明度
        jLabel.setBackground (Color.yellow);//设置背景,需要将透明度关闭
        // 设置文本相对于图片的位置(文本默认在图片右边垂直居中)
        jLabel.setHorizontalTextPosition (SwingConstants.RIGHT);
        jLabel.setVerticalTextPosition (SwingConstants.CENTER);
        // 设置标签内容(在标签内)的对其方式(默认左对齐并垂直居中)
        jLabel.setHorizontalAlignment(SwingConstants.CENTER);
        jLabel.setVerticalAlignment( SwingConstants.CENTER);
        jLabel.setIconTextGap(10);// 设置图片和文本之间的间隙
        jLabel.setToolTipText("提示");// 当鼠标移动到组件上时显示的提示文本
        jLabel.setVisible(true);// 设置组件是否可见
        jLabel.setMinimumSize(new Dimension(10,2));// 设置组件的 最小 大小
        jLabel.setMaximumSize(new Dimension(200,40));// 设置组件的 最大 大小
        jPanel.add(jLabel);

16. JButton - 按钮

(1) 说明

        JButton组件是最简单的按钮组件,在按下和释放2个状态之间进行切换,可以通过捕捉按下并释放的动作执行一些操作,从而完成和用户之间的交互。

(2) 示例

        JPanel jPanel = new JPanel();
        //按钮三种状态图标
        Image image1 = ImageIO.read(new File("D:\\pictures\\3.png")).getScaledInstance(100, 50, Image.SCALE_SMOOTH);
        Image image2 = ImageIO.read(new File("D:\\pictures\\2.png")).getScaledInstance(100, 50, Image.SCALE_SMOOTH);
        Image image3 = ImageIO.read(new File("D:\\pictures\\4.png")).getScaledInstance(100, 50, Image.SCALE_SMOOTH);
        JButton jButton=new JButton("点击");
        jButton.setPreferredSize(new Dimension(100,50));//设置首选大小
        // 设置文本相对于图片的位置(文本默认在图片右边垂直居中)
        jButton.setHorizontalTextPosition (JButton.CENTER);
        jButton.setVerticalTextPosition(JButton.CENTER);
        jButton.setIcon(new ImageIcon(image1));//鼠标未在按钮上显示的图标。
        jButton.setPressedIcon(new ImageIcon(image2));//鼠标按下时显示的图标。
        jButton.setRolloverIcon(new ImageIcon(image3));//鼠标经过时的图标。
        jButton.setBorderPainted(false);//是否显示边框
        jButton.setContentAreaFilled(true);//是否内容区填充
        jButton.setIconTextGap(10);//设置图片与文本间距
        jButton.setFocusPainted(false);//是否绘制焦点(例如浅色虚线框或者加粗的边框表明按钮当前有焦点)。
        jButton.setMnemonic(KeyEvent.VK_A);//设置快捷建,ALT+A 可点击按钮
        jButton.setToolTipText("提示");
        jButton.setFont(new Font("黑体",Font.PLAIN,24));
        jButton.setMargin(new Insets(20,20,20,20));//设置内边距
        jButton.setEnabled(true);//是否启用,默认为true
        //jButton.doClick();//点击按钮
        jButton.addActionListener(e->{
            System.out.println("点击按钮");
        });
        jPanel.add(jButton);

17. JToggleButton - 切换按钮

(1) 说明

        JToggleButton为开关按钮,是 JRadioButton, JCheckBox 的父类,主要实现一个按钮的两种状态(选中 和 未选中)来实现开关切换的效果。

(2) 示例

        JToggleButton jToggleButton=new JToggleButton("状态");
        jToggleButton.setSelected(true);//选中状态
        jToggleButton.setEnabled(false);//是否启用
        jToggleButton.setIcon(new ImageIcon());//关闭显示图标
        jToggleButton.setPressedIcon(new ImageIcon());//打开显示图标
        jToggleButton.setDisabledIcon(new ImageIcon());//禁用显示图标
        jFrame.add(jToggleButton);

18. JRadioButton - 单选按钮

(1) 说明

        JRadioButton为单选按钮,可以在给定的多个选择项中选择一个,并且只能选择一个。

(2) 示例

        //创建单选按钮
        JRadioButton jRadioButton1 = new JRadioButton("选项1");
        JRadioButton jRadioButton2 = new JRadioButton("选项2");
        //单选按钮设置按钮组,可实现单选联动
        ButtonGroup group = new ButtonGroup();
        group.add(jRadioButton1);
        group.add(jRadioButton2);
        jRadioButton1.addActionListener(e->{
            JRadioButton jRadioButton = (JRadioButton) e.getSource();
            //TODO 可通过按钮选中状态设置变量获取单选按钮选中值
        });
        //加到指定容器中
        jFrame.add(jRadioButton1);
        jFrame.add(jRadioButton2);

19. JCheckBox - 复选框

(1) 说明

        JCheckBox 为复选按钮,可以在选中与不选择之间切换,多个时可以多选。

(2) 示例

        //复选框
        JCheckBox jCheckBox = new JCheckBox("选项");
        //添加状态改变事件监听
        jCheckBox.addItemListener(e -> {
            JCheckBox jCheck = (JCheckBox) e.getSource();
            System.out.println(jCheck.isSelected());

        });
        //加到指定容器中
        jFrame.add(jCheckBox);

20. JTextField - 文本框

(1) 说明

        JTextField 是一个轻量级组件,它允许编辑单行文本。

(2) 示例

        JPanel jPanel = new JPanel();
        JTextField jTextField=new JTextField();
        jTextField.setPreferredSize(new Dimension(200,40));
        jTextField.setText("内容");
        jTextField.setSelectedTextColor(Color.BLUE); //文本选中后的颜色
        jTextField.setForeground(Color.RED);//字体颜色
        jTextField.setCaretColor(Color.DARK_GRAY);//设置光标颜色
        jTextField.setDisabledTextColor(Color.YELLOW);//设置文本不可用时颜色
        jTextField.setHorizontalAlignment(JTextField.RIGHT);//设置文本对齐
        jTextField.setFont(new Font("Serief", Font.BOLD, 30));
        jTextField.setEditable(false);//设置是否可编辑
        String text = jTextField.getText();//获取文本框文本
        jTextField.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("获得焦点");
            }

            @Override
            public void focusLost(FocusEvent e) {
                System.out.println("失去焦点");
            }
        });
        jTextField.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("输入:"+e.getKeyChar());
            }

            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println("按下:"+e.getKeyChar());
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("放开:"+e.getKeyChar());
            }
        });
        jTextField.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                System.out.println("新增");
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                System.out.println("删除");
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                System.out.println("修改");
            }
        });
        jPanel.add(jTextField);

21. JPasswordField - 密码框

(1) 说明

        JPasswordField是密码框,继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致。

(2) 示例

        JPanel jPanel = new JPanel();
        JPasswordField jPasswordField=new JPasswordField();
        jPasswordField.setPreferredSize(new Dimension(200,40));
        jPasswordField.setText("内容");
        jPasswordField.setSelectedTextColor(Color.BLUE); //文本选中后的颜色
        jPasswordField.setForeground(Color.RED);//字体颜色
        jPasswordField.setCaretColor(Color.DARK_GRAY);//设置光标颜色
        jPasswordField.setDisabledTextColor(Color.YELLOW);//设置文本不可用时颜色
        jPasswordField.setHorizontalAlignment(JTextField.RIGHT);//设置文本对齐
        jPasswordField.setFont(new Font("Serief", Font.BOLD, 30));
        jPasswordField.setEditable(true);//设置是否可编辑
        char[] password = jPasswordField.getPassword();//获取密码字节数组
        jPasswordField.setEchoChar('*');//设置密码框默认显示的密码字符
        jPasswordField.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                System.out.println("获得焦点");
            }

            @Override
            public void focusLost(FocusEvent e) {
                System.out.println("失去焦点");
            }
        });
        jPasswordField.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("输入:"+e.getKeyChar());
            }

            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println("按下:"+e.getKeyChar());
            }

            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("放开:"+e.getKeyChar());
            }
        });
        jPasswordField.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                System.out.println("新增");
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                System.out.println("删除");
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                System.out.println("修改");
            }
        });
        jPanel.add(jPasswordField);

22. JTextArea - 文本域

(1) 说明

        JTextArea 是一个显示纯文本的多行区域,它能接收多行文本的输入,使用JTextArea构造方法创建对象时可以设定区域的行数、列数。

(2) 示例

        JPanel jPanel = new JPanel();
        JTextArea jTextArea = new JTextArea(12, 34);
        JScrollPane jScrollPane = new JScrollPane(jTextArea);
        jTextArea.setEditable(false); // 设置文本域不可编辑
        jTextArea.setLineWrap(true);//是否自动换行
        jTextArea.append("文本\n");//追加文本
        jTextArea.insert("1234",1);//在指定位置插入文本
        jTextArea.replaceRange("6666",0,1);//替换指定区间的字符串
        jTextArea.setText("设置文本");//设置文本,会清空已有文本
        jPanel.add(jScrollPane);

23. JTextPane - 简单文本编辑器

(1) 说明

        JTextPane 是JEditorPane 的子类,是一个可以编辑和显示html,rtf和普通文本的富文本组件。

(2) 示例

        JPanel jPanel = new JPanel();
        //样式上下文,可以添加多种样式,用时直接从上下文中取
        StyleContext sc = StyleContext.getDefaultStyleContext();
        Style style = sc.addStyle("Style",null);
        SimpleAttributeSet set = new SimpleAttributeSet();//文档样式属性对象
        StyleConstants.setForeground(set, Color.RED);//设置文本颜色
        StyleConstants.setFontSize(set, 30);//设置文本大小
        StyleConstants.setAlignment(set, StyleConstants.ALIGN_LEFT);//设置文本对齐方式
        StyleConstants.setLeftIndent(set,10);//设置左边距
        StyleConstants.setRightIndent(set,10);//设置右边距
        style.addAttributes(set);//样式添加属性
        DefaultStyledDocument doc = new DefaultStyledDocument(sc);
        JTextPane jTextPane = new JTextPane(doc);
        jTextPane.setText("内容");
        jTextPane.setPreferredSize(new Dimension(400,300));//设置文本面板大小
//        doc.setParagraphAttributes(0, doc.getLength(), set, false);//设置段落格式,可设置从哪到多长的文本
        doc.insertString(doc.getLength(), "插入文本",sc.getStyle("Style"));//在指定位置插入文本,可带样式,doc.getLength()为文本后。
        jPanel.add(jTextPane);

24. JEditorPane - 辑各种内容的文本组件

(1) 说明

        JEditorPane的最主要功能在于展 现不同类型的文件格式内容,支持的文件类型有三种:第一种是纯文本类型,其类型的表示法为"text/plain",这种类型的文件就是我们最常使用的txt文件,这类型的文件可以用记事本或WordPad等文书编辑软件来编辑。第二种是RTF类型,其表示为"text/rtf",这种类型的文件特色是能对文字内容做字体缩放、变形、上色等特殊效果。第三类是HTML类型,其表示法为"text/html",这类文件的特色除了在对字体效果的表现之外还具有在文件 内加入图片、超级链接等相关功能。

(2) 示例

        JEditorPane jEditorPane  = new JEditorPane("https://www.w3cschool.cn/");
        jEditorPane.setEditable(false);     //请把editorPane设置为只读,不然显示就不整齐
        jEditorPane.setContentType("text/html");//text/plain(纯文本)、text/rtf(rtf文本)、text/html(html文本)
        //超链接事件
        jEditorPane.addHyperlinkListener((HyperlinkEvent event) -> {
            if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    jEditorPane.setPage(event.getURL());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else if (event.getEventType() == HyperlinkEvent.EventType.ENTERED) {
                System.out.println("click this link");
            } else if (event.getEventType() == HyperlinkEvent.EventType.EXITED) {
                System.out.println("Ready");
            }
        });
        jPanel.add(jEditorPane);

25. JComboBox - 下拉列表框

(1) 说明

        JComboBox组件被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项。当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示。该组件分为可编辑和不可编辑两种形式,对于不可编辑的下拉框,用户只能选择现有的选项列表。对于可编辑的下拉框,用户既可以选择现有的选项列表,也可以自己输入新的内容,应注意自己输入的内容只能作为当前项显示,并不会添加到下拉框的选项列表中。

(2) 示例

        //下拉框数据
        DefaultComboBoxModel boxModel = new DefaultComboBoxModel();
        boxModel.addElement("Apple");
        boxModel.addElement("Grapes");
        boxModel.addElement("Mango");
        //下拉框
        JComboBox jComboBox = new JComboBox(boxModel);
        //设置选中值
        jComboBox.setSelectedIndex(0);
        //设置是否可编辑,默认不可编辑
        jComboBox.setEditable(true);
        //jComboBox.setSelectedItem("Mango");
        //添加到滚动条面板里
        JScrollPane jScrollPane = new JScrollPane(jComboBox);
        // 获取选中值,可用于在其他组件事件内获取选中的值
        Object selectedItem = jComboBox.getSelectedItem();
        //加到指定容器中
        jFrame.add(jScrollPane);

26. JList - 列表

(1) 说明

       JList为列表框可以显示一组数据项,从中可选择一个或多个数据。

(2) 示例

        JPanel jPanel = new JPanel();
        // 滚动列表数据
        DefaultListModel listModel = new DefaultListModel();
        listModel.addElement("Apple");
        listModel.addElement("Grapes");
        listModel.addElement("Mango");
        //滚动列表
        JList jList = new JList(listModel);
        //设置列表的选择模式。SINGLE_SELECTION:单一的选择;SINGLE_INTERVAL_SELECTION:单段选择;MULTIPLE_INTERVAL_SELECTION:多段选择
        jList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        //默认选中项
        jList.setSelectedIndex(1);
        //显示出来的数据条数
        jList.setVisibleRowCount(2);
        //添加到滚动条面板里
        JScrollPane jScrollPane = new JScrollPane(jList);
        //选择事件
        jList.addListSelectionListener(e -> {
            if(!e.getValueIsAdjusting()){//判断是否是一系列多个事件中的一个,防止多次调用
                //获取选中值集合,可用于在其他组件事件内获取选中的值
                List list = jList.getSelectedValuesList();
                System.out.println(list);
            }
        });
        //加到指定容器中
        jPanel.add(jScrollPane);

27. JProgressBar - 进度条

(1) 说明

        JProgressBar进度条是一种以可视化形式显示某些任务进度的组件。

(2) 示例

        //进度条,设置范围
        JProgressBar progressBar = new JProgressBar(0, 100);
        //设置当前值,可不断修改该值使进度条改变
        progressBar.setValue(0);
        //是否显示百分比,通过setString方法设置后失效
        progressBar.setStringPainted(true);
        //加到指定容器中
        jFrame.add(progressBar);

28. JTable - 表格

(1) 说明

        JTable 是用来显示和编辑常规二维单元表。

(2) 示例

        //静态加载表格数据
        //表头
        Object[] booksColumn = { "图书名称", "图书作者", "图书价格" };
        // 二维表格数据
        Object[][] dataset = { { "java", "brucl", "85" }, { "javascript", "lunce", "54" } };
        //创建表格
        JTable jTable = new JTable(dataset, booksColumn);
        //表格放到滚动条面板里
        JScrollPane scrollPane = new JScrollPane(jTable);
        //加到指定容器中
        jFrame.add(scrollPane);
        //动态加载表格数据
        // 表头(列名)
        Vector<String> columnNames = new Vector<String>();
        columnNames.add("编号");
        columnNames.add("姓名");
        columnNames.add("性别");
        columnNames.add("创建时间");
        // 创建表格模型
        DefaultTableModel dataModel = new DefaultTableModel(columnNames, 0);
        // 创建JTable表格组件
        JTable jTable = new JTable(dataModel);
        //表格放到滚动条面板里
        JScrollPane scrollPane = new JScrollPane(jTable);
        //滚动条面板放到窗口中
        jFrame.add(scrollPane, BorderLayout.CENTER);
        //加载数据按钮,可动态加载数据
        JButton jButton = new JButton("加载数据");
        jButton.addActionListener(e -> {
            Vector<Vector<Object>> rowData = new Vector<Vector<Object>>();
            for (int i = 1; i <= 20; i++) {
                Vector<Object> rowItem = new Vector<Object>();
                rowItem.add(i);
                rowItem.add("用户" + i);
                rowItem.add(i % 2 == 1 ? "男" : "女");
                rowItem.add(new java.util.Date());
                rowData.add(rowItem);
            }
            // 绑定结果
            dataModel.setDataVector(rowData, columnNames);
        });
        jFrame.add(jButton, BorderLayout.WEST);

29. JTree - 树

(1) 说明

        JTree 组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。

(2) 示例

        JPanel jPanel = new JPanel();
        //构造树结点数据节点
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("中国");
        DefaultMutableTreeNode r1 = new DefaultMutableTreeNode("安徽");
        DefaultMutableTreeNode r2 = new DefaultMutableTreeNode("江苏");
        DefaultMutableTreeNode o1 = new DefaultMutableTreeNode("合肥");
        DefaultMutableTreeNode o2 = new DefaultMutableTreeNode("芜湖");
        DefaultMutableTreeNode o4 = new DefaultMutableTreeNode("南京");
        DefaultMutableTreeNode o5 = new DefaultMutableTreeNode("苏州");
        root.add(r1);
        root.add(r2);
        r1.add(o1);
        r1.add(o2);
        r2.add(o4);
        r2.add(o5);
        JTree jTree = new JTree(root);
        jTree.setEditable(true);//是否双击可编辑节点
        jTree.putClientProperty( "JTree.lineStyle", "Angled");//设置结点连接线样式,None没有连接线,Horizontal水平分割线,Angled直角线连接
        jTree.setShowsRootHandles(false);//根根结点是否有"展开、折叠"图标
        jTree.setRootVisible(true);//是否显示根结点
        jPanel.add(jTree);
        
        JButton jButton=new JButton("点击");
        jButton.addActionListener(e -> {
            //1.得到当前选中 的结点
            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
//            DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新结点");
//            selectedNode.add(newNode);//创建及添加新子结点
            selectedNode.removeFromParent();//删除节点
//            TreePath selectionPath = jTree.getSelectionPath();
//            jTree.startEditingAtPath(selectionPath);//开始编辑选择节点,不能updateUI
//            jTree.setSelectionPath(new TreePath(new Object[]{root,r1,o1}));//设置指定路径为选中
//            jTree.setSelectionRows(TreePath[] paths);//设置多个指定路径为选中
            jTree.updateUI();
        });
        jPanel.add(jButton);

30.  JToolTip - 组件提示

(1) 说明

        JToolTip是指当鼠标停留在一个控件上时显示的一个包含相关信息的方框,可通过重写组件createToolTip方法自定义提示框样式。

(2) 示例

        //自定义ToolTip,需要重写组件createToolTip方法
       JLabel jLabel=new JLabel("标签"){
           @Override
           public JToolTip createToolTip() {
               JToolTip jToolTip = new JToolTip();
               jToolTip.setForeground(Color.BLACK);//前景色
               jToolTip.setBackground(Color.YELLOW);//后景色
               jToolTip.setFont(new Font("黑体",Font.ITALIC,50));//字体
               jToolTip.setBorder(BorderFactory.createLineBorder(Color.GREEN));//设置边框
               jToolTip.setOpaque(false);//设置是否不透明,设置为fasle后背景色设置失效
               jToolTip.setComponent(this);
               return jToolTip;
           }
       };
       jLabel.setToolTipText("提示");

31. JSlider - 滑杆

(1) 说明

       JSlider 滑块是一个允许用户在有限区间内通过移动滑块来选择值的组件。

(2) 示例

        //设置组件方向,最大最小值及初始值。
        JSlider slider = new JSlider(JSlider.HORIZONTAL,0,100,0);
        slider.setMajorTickSpacing(10);//主刻度
        slider.setMinorTickSpacing(2);//次刻度
        slider.setPaintLabels(true);//是否在滑块上绘制标签,默认false
        slider.setPaintTicks(true);//是否在滑块上绘制刻度标记,默认false
        slider.setPaintTrack(true);//是否在滑块上绘制滑道,默认true
        slider.setInverted(false);//是否倒序,默认false
        slider.addChangeListener(e -> {
            System.out.println(((JSlider)e.getSource()).getValue());
        });
        //加到指定容器中
        jFrame.add(slider);

32. JColorChooser - 颜色选择器

(1) 说明

        JColorChooser颜色选择器用于颜色的选择、编辑等操作。主要为showDialog()和createDialog()方法的使用,前者只能选择颜色,后者能通过事件监听器实现颜色选择之后的应用。

(2) 示例

Color backgroundColor = JColorChooser.showDialog(jFrame,"请选择颜色", Color.white);

33. JFileChooser - 文件选择器

(1) 说明

        JFileChooser是一个为用户提供选择文件的简单机制的组件。

(2) 示例

        JPanel jPanel = new JPanel();
        JButton jButton = new JButton("点击");
        jButton.addActionListener(e -> {
            //文件选择器
            JFileChooser jFileChooser = new JFileChooser();
            //设置文件的打开模式.FILES_ONLY(仅文件)、DIRECTORIES_ONLY(仅目录)、FILES_AND_DIRECTORIES(文件和目录)
            jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            //打开文件选择器的当前显示目录
            jFileChooser.setCurrentDirectory(new File("D:\\zp\\"));
            //是否可以同时选取多个文件,默认值是false。
            jFileChooser.setMultiSelectionEnabled(false);
            //文件类型限制
            jFileChooser.setFileFilter(new FileFilter() {
                @Override
                public boolean accept(File f) {
                    if (f.isDirectory())return true;
                    //返回true的文件或目录在文件选择器中显示
                    return f.getName().endsWith(".zip");
                }
                @Override
                public String getDescription() {
                    //返回文件选择器 类型显示 字段
                    return ".zip";
                }
            });
            //显示文件选择器弹框,返回0已选择文件,1为没选
            int returnValue = jFileChooser.showDialog(jFrame, "选择文件");
            System.out.println(returnValue);
            if (returnValue == JFileChooser.APPROVE_OPTION) {
                //选择的文件
                File file = jFileChooser.getSelectedFile();
            }
        });
        jPanel.add(jButton);

34. JOptionPane - 弹框

(1) 说明

        JOptionPane可以非常方便地创建一些简单的对话框,含有消息对话框、确认对话框、输入对话框、自定义选项对话框。

(2) 示例

//消息提示框。ERROR_MESSAGE(错误)、INFORMATION_MESSAGE(信息)、WARNING_MESSAGE(警告)、QUESTION_MESSAGE(问题)、PLAIN_MESSAGE(无图标)
JOptionPane.showMessageDialog(jPanel,"错误提示框","错误提示框",JOptionPane.ERROR_MESSAGE);
//确认框,返回结果 是-0 否-1  取消-2 右上角关闭- -1
int i = JOptionPane.showConfirmDialog(jFrame, "是否操作");
//输入框,返回输入值
String s = JOptionPane.showInputDialog("请输入。。。");
//自定义配置的弹框,可设置消息、标题、操作类型、消息类型,自定义按钮,自定义图标等
int i = JOptionPane.showOptionDialog(jFrame, "消息", "标题", JOptionPane.CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, new ImageIcon(), new Object[]{"是","否","不确定"}, "否");

//在指定组件内部显示消息提示框。ERROR_MESSAGE(错误)、INFORMATION_MESSAGE(信息)、WARNING_MESSAGE(警告)、QUESTION_MESSAGE(问题)、PLAIN_MESSAGE(无图标)
JOptionPane.showInternalMessageDialog(jPanel,"错误提示框","错误提示框",JOptionPane.ERROR_MESSAGE);
//在指定组件内部显示确认框,返回结果 是-0 否-1  取消-2 右上角关闭- -1
int i = JOptionPane.showInternalConfirmDialog(jFrame, "是否操作");
//在指定组件内部显示输入框,返回输入值
String s = JOptionPane.showInternalInputDialog("请输入。。。");
//在指定组件内部显示配置弹框,可设置消息、标题、操作类型、消息类型,自定义按钮,自定义图标等
int i = JOptionPane.showInternalOptionDialog(jFrame, "消息", "标题", JOptionPane.CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, new ImageIcon(), new Object[]{"是","否","不确定"}, "否");

35. JSpinner  - 微调选择器

(1) 说明

         JSpinner允许用户从有序序列中选择数字或对象值。

(2) 示例

        //数值微调控制配置,指定初始值、最小值、最大值、进步值。
        SpinnerModel spinnerModel1 = new SpinnerNumberModel(1, 0, 100, 1);
        //微调控制,数字选择
        JSpinner spinner1 = new JSpinner(spinnerModel1);
        //监听器
        spinner1.addChangeListener(e -> {
            System.out.println(((JSpinner)e.getSource()).getValue());
        });
        //加到指定容器中
        jFrame.add(spinner1);

        //日期微调控制配置,可指定默认显示日期,开始、结束日期 及 显示类型。
        SpinnerDateModel spinnerModel2 = new SpinnerDateModel();
        spinnerModel2.setValue(new Date());//设置当前日期
        JSpinner spinner2 = new JSpinner(spinnerModel2);
        //配置日期格式
        JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner2, "yyyy-MM-dd HH:mm:sss");
        DateFormatter formatter = (DateFormatter)editor.getTextField().getFormatter();
        formatter.setAllowsInvalid(false);//是否允许正在编辑的值在一段时间内无效
        formatter.setOverwriteMode(false);//是否新字符将覆盖模型中的现有字符。
        spinner2.setEditor(editor);
        //加到指定容器中
        jFrame.add(spinner2);

        //数组或集合微调控制配置,指定集合或数组数据。
        String[] data={"A","B","C"};
        SpinnerListModel spinnerModel3 = new SpinnerListModel(data);
        //微调控制,数字选择
        JSpinner spinner3 = new JSpinner(spinnerModel3);
        //加到指定容器中
        jFrame.add(spinner3);

36. JScrollBar - 滚动条

(1) 说明

        JScrollbar用于添加水平和垂直滚动条。它是滚动条的实现。

(2) 示例

        JPanel jPanel = new JPanel();
        //数值选择滚动条,可设置方向、初始值、延伸区,最大最小值。最大值-最小值-延伸区=滚动条刻度(长度)
        JScrollBar jScrollBar = new JScrollBar(JScrollBar.HORIZONTAL,0,0,0,100);
        jScrollBar.setValue(0);// 设置默认滚动轴位置。
        jScrollBar.setPreferredSize(new Dimension(200,20));
        jScrollBar.setUnitIncrement(1);// 设置拖曳滚动轴时,滚动轴刻度一次的变化量。
        jScrollBar.setBlockIncrement(10);// 设置当鼠标在滚动轴列上按一下是,滚动轴一次所跳的区块大小
        jScrollBar.setMinimum (1);//最小值
        jScrollBar.setMaximum (100); //最大值
        //监听器
        jScrollBar.addAdjustmentListener(e->{
            System.out.println(jScrollBar.getValue());
        });
        //加到指定容器中
        jPanel.add(jScrollBar);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郑重其事,鹏程万里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值