Java的Swing编程中使用SwingWorker线程模式及顶层容器

Java的Swing编程中,使用SwingWorker线程模式以及顶层容器可以实现多线程的UI操作,避免了长时间运行的任务卡住了界面的情况。下面将详细介绍如何使用SwingWorker线程模式及顶层容器进行Swing编程。

一、SwingWorker线程模式

SwingWorker是Java提供的一个工具类,用于在后台线程中执行耗时的任务,并在任务完成后通知Swing应用程序。

1.创建SwingWorker类

public class SwingWorkerDemo extends SwingWorker<Void, Integer>{

    private JTextArea textArea;

    public SwingWorkerDemo(JTextArea textArea) {
        this.textArea = textArea;
    }

    @Override
    protected Void doInBackground() throws Exception {
      int i = 0;
      while (i < 100) {
        Thread.sleep(100);
        i++;
        publish(i);           //在doInBackground中通过publish方法通知process方法
      }
      return null;
    }

    @Override
    protected void process(List<Integer> chunks) {   //在process方法中更新UI组件
      for (Integer chunk : chunks) {
        textArea.append(String.valueOf(chunk) + "\n");
      }
    }

    @Override
    protected void done() {        //在done方法中任务完成后通知Swing应用程序
      System.out.println("Done!");
    }
}

2.启动SwingWorker类

public class Main{

    public static void main(String[] args) {
        JTextArea textArea = new JTextArea();
        JFrame frame = new JFrame();    
        frame.add(textArea);
        frame.setSize(200, 300);
        frame.setVisible(true);

        SwingWorkerDemo worker = new SwingWorkerDemo(textArea);   //创建SwingWorker对象
        worker.execute();    //启动SwingWorker线程 
    }
}

二、顶层容器

顶层容器是Swing组件的一个父容器,如JFrame、JDialog等。使用顶层容器可以实现窗口的创建和UI布局等操作。

1.创建顶层容器

JFrame frame = new JFrame("My Frame");   //创建JFrame窗口
frame.setSize(500, 500);   //设置窗口大小
frame.setLocationRelativeTo(null);    //将窗口居中显示
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //设置关闭窗口时的操作

2.向顶层容器添加组件

JButton button = new JButton("Click me");
frame.add(button, BorderLayout.NORTH);

3.显示顶层容器

frame.setVisible(true);

三、整合SwingWorker线程模式和顶层容器

下面的示例实现了一个在SwingWorker线程中递增计数,在JFrame窗口中显示计数结果的功能。

public class Demo extends JFrame{

    private JTextArea textArea;

    public Demo() {
        textArea = new JTextArea();
        JButton button = new JButton("Start");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                SwingWorker<Void, Integer> worker = new SwingWorker<Void, Integer>() {

                    @Override
                    protected Void doInBackground() throws Exception {
                        int i = 0;
                        while (i < 100) {
                            Thread.sleep(100);
                            i++;
                            publish(i);
                        }
                        return null;
                    }

                    @Override
                    protected void process(List<Integer> chunks) {
                        for (Integer chunk : chunks) {
                            textArea.append(String.valueOf(chunk) + "\n");
                        }
                    }

                    @Override
                    protected void done() {
                        System.out.println("Done!");
                    }
                };
                worker.execute();
            }
        });

        setLayout(new BorderLayout());
        add(button, BorderLayout.NORTH);
        add(textArea, BorderLayout.CENTER);
        setTitle("SwingWorker Demo");
        setSize(200, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Demo();
    }
}

以上就是关于Java的Swing编程中使用SwingWorker线程模式及顶层容器的攻略,希望能够帮助了解Swing编程的读者。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的Swing编程中使用SwingWorker线程模式及顶层容器 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Android个人手机通讯录开发详解

    Android个人手机通讯录开发详解 概述 通讯录是手机操作系统中非常重要的一项功能,大多数APP,尤其是社交类APP都需要使用到该功能。本文将详细讲解如何在Android平台上开发个人手机通讯录,并提供两个示例。通讯录主要分为分组和联系人两个部分,下面将对这两部分进行详细介绍。 分组 分组主要用来对联系人进行分类,让用户能够更加方便地查找和编辑联系人信息。…

    Java 2023年5月20日
    00
  • jsp、css中引入外部资源相对路径问题分析

    让我结合标准的markdown格式来详细讲解一下“jsp、css中引入外部资源相对路径问题分析”的完整攻略。 问题背景 在jsp和css中,我们经常需要引入外部资源,例如图片、样式表、脚本文件等。这些资源的引入路径可能涉及到相对路径和绝对路径的问题,如果不理解路径的规则,就容易导致资源引入失败,或者出现页面样式混乱等问题。 相对路径 相对路径是指相对于当前文…

    Java 2023年6月15日
    00
  • editplus配置java编程环境详细介绍

    EditPlus配置Java编程环境详细介绍 EditPlus是一款文本编辑器,它可以为Java编程者提供良好的编程环境。以下是EditPlus的Java编程环境配置攻略,包括Java 开发工具包(JDK)和编译器环境的配置。 JDK安装 首先,我们需要下载最新的JDK。当前最新版本是JDK 16。通过Oracle官网下载JDK 安装程序并开始安装过程。 安…

    Java 2023年5月23日
    00
  • Spring Security短信验证码实现详解

    Spring Security短信验证码实现详解 简介 Spring Security是一个功能强大的认证和授权框架。它提供了多种认证方案,包括用户名密码认证、OAuth2.0认证等。但是默认情况下,Spring Security没有提供短信验证码认证的实现。因此,如果我们需要在Spring Security中实现短信验证码认证,需要自己进行实现。 本文将详…

    Java 2023年6月3日
    00
  • java 逐行读取txt文本如何解决中文乱码

    要想解决中文乱码问题,需要了解Java中文编码方式的特点。Java会默认使用UTF-8编码格式,而读取txt文本时可能会面对其他编码格式,因此需要进行适当的转码操作。 以下是逐行读取txt文本并解决中文乱码问题的步骤: 创建一个FileReader对象,用于读取txt文件,并指定编码格式为GBK。 FileReader fr = new FileReader…

    Java 2023年5月20日
    00
  • python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解

    Python中的print()函数和Java中的System.out.print()都是输出函数,它们都可以向控制台输出内容。下面详细讲解两者的区别以及两者在输出时“+”的功能。 Python中print()函数 语法 print(value1, value2, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=F…

    Java 2023年5月26日
    00
  • 微信小程序 支付后台java实现实例

    下面是详细讲解“微信小程序 支付后台java实现实例”的完整攻略。 一、前置条件 在进行微信小程序支付后台java实现之前,需要先满足以下条件: 在微信公众平台上注册了小程序,并且通过了认证。 微信支付需要使用开通微信支付服务的普通商户号,且已完成相关配置。 开发人员需要了解基本的java开发知识。 二、参考代码 参考代码中使用了SpringBoot框架和M…

    Java 2023年5月23日
    00
  • 腾讯云服务器搭建Jenkins详细介绍

    腾讯云服务器搭建Jenkins详细介绍 介绍 Jenkins是一个自动化工具,它提供了很多插件和工具,可以用于构建、测试和部署软件。本文将介绍如何在腾讯云服务器上搭建Jenkins。 步骤 选择合适的云服务器 在腾讯云控制台中,选择云服务器服务,然后选择合适的云服务器实例。可以根据自己的需求选择不同的规格、地区、镜像等选项。 开启端口 要使用Jenkins,…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部