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日

相关文章

  • Java数组队列概念与用法实例分析

    Java数组队列概念与用法实例分析 什么是队列 队列是一种特殊的线性数据结构,它的特殊之处在于它的插入和删除操作只能在队列的两端进行。从队列的一端插入元素可以称为“入队”,而从另一端删除元素则称为“出队”。 Java中的数组队列 Java中的数组队列是一种具体的队列实现方式。它内部使用数组作为底层数据结构,并支持动态扩容。在Java中可以使用Queue接口来…

    Java 2023年5月26日
    00
  • 微信小程序实现上传照片代码实例解析

    下面我将为你介绍一份完整的“微信小程序实现上传照片代码实例解析”的攻略。 1. 目标描述 本攻略的目标是从零开始使用微信小程序实现上传照片的功能。在完成本攻略后,你将能够轻松地了解如何使用微信小程序上传照片,为自己的项目添加上传照片的功能。 2. 实现思路 实现上传照片功能的思路可以总结为以下几个步骤: 添加<input>元素,用于选择要上传的照…

    Java 2023年5月23日
    00
  • 利用JSP session对象保持住登录状态

    利用JSP的session对象可以实现用户登录状态的保持和管理,下面是完整的攻略: 创建登录页面 创建一个简单的登录页面,包含一个用户名和密码的表单,在提交时向服务器发送POST请求。 示例代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu…

    Java 2023年6月15日
    00
  • Hibernate映射之基本类映射和对象关系映射详解

    Hibernate映射之基本类映射和对象关系映射详解 什么是Hibernate映射 Hibernate是一种基于Java平台的ORM(Object Relational Mapping)框架,其作用是将Java对象映射到数据库中的关系型数据。Hibernate映射就是将Java类及其属性映射为数据表及其字段。 基本类映射 基本类映射指的是将Java类的属性映…

    Java 2023年5月20日
    00
  • JAVA中 Spring定时器的两种实现方式

    JAVA中Spring定时器可以使用两种方式实现,分别是基于注解的方式和基于XML配置的方式。下面分别进行说明。 基于注解的方式 1. 引入相关依赖 在pom.xml中引入Spring的定时器依赖: <dependency> <groupId>org.springframework</groupId> <artifa…

    Java 2023年6月1日
    00
  • eclipse/IDEA配置javafx项目步骤(图文教程)

    以下是“eclipse/IDEA配置javafx项目步骤(图文教程)”的完整攻略。 1. 前置条件 在开始配置javafx项目之前,需要保证以下前置条件已经满足: 已经安装Java Development Kit (JDK) 8或以上版本; 已经安装了Eclipse或者IDEA开发工具。 如果以上条件还没有满足,请先安装JDK和开发工具。 2. 新建项目 2…

    Java 2023年5月26日
    00
  • Win7系统脚步设置出现问题导致网页内容无法复制的解决方法

    当Win7系统脚步设置出现问题时,会导致网页内容无法复制或复制后格式混乱的情况。以下是解决此问题的步骤: 步骤一:检查剪贴板服务是否开启 按下’Win+R’键,输入’services.msc’,回车进入服务管理器界面。 在该界面中找到“剪贴板服务”并右键点击。选择属性,检查该服务是否已开启。 若该服务未开启,点击’启动’即可。 步骤二:清空剪贴板缓存 按下’…

    Java 2023年5月30日
    00
  • Spring中MVC模块代码详解

    以下是关于“Spring中MVC模块代码详解”的完整攻略,其中包含两个示例。 Spring中MVC模块代码详解 Spring MVC是一个基于MVC模式的Web框架,它可以帮助我们快速开发Web应用程序。本文将介绍Spring MVC的MVC模块代码详解,并提供两个示例。 控制器 控制器是Spring MVC的核心组件之一,它负责处理客户端请求并返回响应。以…

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