java swing JDialog 和 java.util.concurrent的使用
参考链接:
Java-Swing的JFrame的一些插件使用详解
java swing JDialog 使用
ScheduledExecutorService定时周期执行指定的任务
swing JDialog
创建对话框窗口的主要类。可以使用此类创建自定义的对话框,或者调用
JOptionPane中的多个类方法来创建各种标准对话框。有关创建对话框的信息,请参阅 The Java Tutorial 中的 How to Make Dialogs 一节。
JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中
JDialog组件包含一个JRootPane作为其唯一子组件。contentPane应该是所有JDialog子组件的父级。为了方便使用add及其变体,已经重写了remove和setLayout,以在必要时将其转发到contentPane。这意味着可以编写:dialog.add(child);
setLayout(布局管理器)
各容器都有默认的布局管理,见下表:
| 容器 | 默认布局方式 | |
|---|---|---|
| 顶层容器 | JFrame | BorderLayout(边界布局) |
| 顶层容器 | JDialog | BorderLayout(边界布局) |
| 顶层容器 | JApplet | JApplet |
| 中间容器 | JPanel | FlowLayout(流式布局) |
更多内容可见:https://blog.csdn.net/qq_38341596/article/details/78800646
JDialog的构造函数
- JDialog():建立一个non-modal的对话框,没有title也不属于任何事件窗口组件。
- JDialog(Dialog owner):建立一个属于Dialog组件的对话框,为non-modal形式,也没有title.
- JDialog(Dialog owner,Boolean modal):建立一个属于Dialog组件的对话框,可决定modal形式,但没有title.
- JDialog(Dialog owner,String title):建立一个属于Dialog组件的对话框,为non-modal形式,对话框上有title.
- JDialog(Dialog owner,String title,Boolean modal):建立一个属于Dialog组件的对话框,可决定modal形式,且对话框上有 title.
- JDialog(Frame owner):建立一个属于Frame组件的对话框,为non-modal形式,也没有title.
- JDialog(Frame owner,Boolean modal):建立一个属于Frame组件的对话框,可决定modal形式,但没有title.
- JDialog(Frame owner,String title):建立一个属于Frame组件的对话框,为non-modal形式,对话框上有title.
- JDialog(Frame owner,String title,Boolean modal):建立一个属于Frame组件的对话框,可决定modal形式,且对话框上有title. 经常用这个构造函数。
上面所说的modal是一种对话框操作模式,当modal为true时,代表用户必须结束对话框才能回到原来所属的窗口。当modal为 false时,代表对话框与所属窗口可以互相切换,彼此之间在操作上没有顺序性。
一般而言对话框都会依附在某个窗口上,例如JFrame或JDialog,原因在于对话框通常是一个程序运行的过程中与用户互动的中 间过程,在使用JDialog上跟JFrame非常相似,由上面的JDialog层次结构图中你可以发现,JDialog是继承AWT的Dialog类而来,因 此JDialog为一个Heavyweight组件。要加入组件到JDialog上与JFrame是一样的,你必须先取得JDialog的ContentPane,然后再把组 件加到此ContentPane中,JDialog默认的版面管理器是BorderLayout.
除此之外,你还可以使用JOptionPane。当你在使用 JOptionPane时,系统会自动产生JDialog组件,并将JOptionPane的内容放入JDialog的ContentPane中,而这些均由系统在背后自动 运行,并不需要由我们介入。
我们下面没有用到它,故不过多叙述,相关使用示例见:JOptionPane
scheduleAtFixedRate和scheduleWithFixedDelay方法定义
接口scheduleAtFixedRate原型定义及参数说明
当执行任务的时间大于我们指定的间隔时间时,它并不会在指定间隔时开辟一个新的线程并发执行这个任务。而是等待该线程执行完毕。
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long initialDelay,
long period,
TimeUnit unit);
command:执行线程
initialDelay:初始化延时
period:两次开始执行最小间隔时间
unit:计时单位
示例:
/**
* 以固定周期频率执行任务
*/
public static void executeFixedRate() {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(
new EchoServer(),
0,
100,
TimeUnit.MILLISECONDS);
}
接口scheduleWithFixedDelay原型定义及参数说明
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit);
command:执行线程
initialDelay:初始化延时
period:前一次执行结束到下一次执行开始的间隔时间(间隔执行延迟时间)
unit:计时单位
示例:
/**
* 以固定延迟时间进行执行
* 本次任务执行完成后,需要延迟设定的延迟时间,才会执行新的任务
*/
public static void executeFixedDelay() {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleWithFixedDelay(
new EchoServer(),
0,
100,
TimeUnit.MILLISECONDS);
}
给出一个由JDialog和scheduleAtFixedRate写的示例程序
主函数类:

1 import java.awt.Dimension;
2 import java.awt.event.ActionEvent;
3 import java.awt.event.ActionListener;
4
5 import javax.swing.JButton;
6 import javax.swing.JFrame;
7
8
9
10 public class TimerTest extends JFrame {
11
12 /**
13 *
14 */
15 private static final long serialVersionUID = 1L;
16 private static JButton button;
17 private static TimerTest TimerTest;
18
19 public static void main(String[] args) {
20 TimerTest = new TimerTest();
21 button = new JButton("按我");
22 button.addActionListener(new ActionListener() {
23
24 @Override
25 public void actionPerformed(ActionEvent e) {
26 TimeDialog d = new TimeDialog();
27 int result = d.showDialog(TimerTest, "对方想要和你语音是否接受?", 10);// TimerTest是程序主窗口类,弹出的对话框10秒后消失
28 System.out.println("===result: "+result);
29 }
30 });
31 /* 这个方法定义了组件的位置。
32 * setBounds(x, y, width, height)
33 * x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
34 */
35 button.setBounds(2, 5, 80,20);
36 /* 布局部分我们这边不多做介绍
37 * 这边设置布局为 null
38 */
39 TimerTest.getContentPane().setLayout(null);
40 TimerTest.getContentPane().add(button);
41 TimerTest.setSize(new Dimension(400,200));
42 TimerTest.setLocation(500,200);
43 TimerTest.setVisible(true);
44 TimerTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
45
46 }
47
48 }

1 import java.awt.Dimension;
2 import java.awt.event.ActionEvent;
3 import java.awt.event.ActionListener;
4 import java.util.concurrent.Executors;
5 import java.util.concurrent.ScheduledExecutorService;
6 import java.util.concurrent.TimeUnit;
7
8 import javax.swing.JButton;
9 import javax.swing.JDialog;
10 import javax.swing.JFrame;
11 import javax.swing.JLabel;
12
13 public class TimeDialog {
14 private String message = null;
15 private int secends = 0;
16 private JLabel label = new JLabel();
17 private JButton confirm,cancel;
18 private JDialog dialog = null;
19 int result = -5;
20 public int showDialog(JFrame father, String message, int sec)
21 {
22 this.message = message;
23 secends = sec;
24 label.setText(message);
25 label.setBounds(80,6,200,20);
26 ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();
27 confirm = new JButton("接受");
28 confirm.setBounds(100,40,60,20);
29 confirm.addActionListener(new ActionListener() {
30 @Override //这个是事件触发函数
31 public void actionPerformed(ActionEvent e) {
32 result = 0;
33 //dispose只是关闭你的图形资源,而没有关闭进程
34 TimeDialog.this.dialog.dispose();
35 }
36 });
37 cancel = new JButton("拒绝");
38 cancel.setBounds(190,40,60,20);
39 cancel.addActionListener(new ActionListener() {
40
41 @Override
42 public void actionPerformed(ActionEvent e) {
43 result = 1;
44 TimeDialog.this.dialog.dispose();
45 }
46 });
47 //JDialog(Frame owner,Boolean modal):建立一个属于Frame组件的对话框,可决定modal形式,但没有title.
48 //当modal为true时,代表用户必须结束对话框才能回到原来所属的窗口。当modal为 false时,
49 //代表对话框与所属窗口可以互相切换,彼此之间在操作上没有顺序性。
50 dialog = new JDialog(father, true);
51 dialog.setTitle("提示: 本窗口将在"+secends+"秒后自动关闭");
52 dialog.setLayout(null);
53 dialog.add(label);
54 dialog.add(confirm);
55 dialog.add(cancel);
56 //让程序定时执行
57 s.scheduleAtFixedRate(new Runnable() {
58 @Override
59 public void run() {
60 // TODO Auto-generated method stub
61 TimeDialog.this.secends--;
62 if(TimeDialog.this.secends == 0) {
63 TimeDialog.this.dialog.dispose();
64 }else {
65 dialog.setTitle("提示: 本窗口将在"+secends+"秒后自动关闭");
66 //dialog.setTitle("加上我就覆盖掉上面啦!");
67 }
68 }
69 }, 1, 1, TimeUnit.SECONDS); //SECONDS这是计时单位
70 //最后调用新建的JDialog的pack和setVisual method去显示对话框。
71 dialog.pack();
72 dialog.setSize(new Dimension(350,100));
73 dialog.setLocationRelativeTo(father);
74 dialog.setVisible(true);
75 return result;
76
77 }
78
79 }
java swing JDialog 和 java.util.concurrent的使用的更多相关文章
- Java Swing 快捷键
Java Swing 快捷键 给Java Swing 编程中按钮或者其他组件事件添加快捷键的方法: Component.setAccelerator(KeyStroke.getKeyStroke(‘ ...
- java CountDownLatch报错java.lang.IllegalMonitorStateException: null
笔者使用websocket进行通信,服务器异步返回.websocket服务器又异步调用其他websocket,也是异步访问. 由于无法预测服务器调用第三方websocket什么时候调用结束,使用了Co ...
- netty-websocket-spring-boot-starter关闭报错 io/netty/channel/AbstractChannel$AbstractUnsafe io/netty/util/concurrent/GlobalEventExecutor
报错 java.lang.NoClassDefFoundError: io/netty/channel/AbstractChannel$AbstractUnsafe$ at io.netty.chan ...
- java笔试要点(java.sql包)
提供JAVA存取数据库能力的包是 ( ) A: java.sql B: java.awt C: java.lang D: java.swing 解析: A,java.sql包提供Java存取数据库能力 ...
- java.util.concurrent介绍【转】
java.util.concurrent介绍 java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent ...
- 原子类java.util.concurrent.atomic.*原理分析
原子类java.util.concurrent.atomic.*原理分析 在并发编程下,原子操作类的应用可以说是无处不在的.为解决线程安全的读写提供了很大的便利. 原子类保证原子的两个关键的点就是:可 ...
- Java源码之 java.util.concurrent 学习笔记01
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...
- jdk8中java.util.concurrent包分析
并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...
- java.util.concurrent包详细分析--转
原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...
随机推荐
- C语言实现九大排序算法
C语言实现九大排序算法 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序 C语言实现九大排序算法 直接插入排序 将数组分为两个部分,一个是有序部分,一 ...
- CAN总线采样点测试
采样点是什么? 采样点是接受节点判断信号逻辑的位置,CAN通讯属于异步通讯.需要通过不断的重新同步才能保证收发节点的采样准确. 若采样点太靠前,则因为线缆原因,DUT外发报文尚未稳定,容易发生采样错误 ...
- 改进你的c#代码的5个技巧(四)
像每一篇文章一样,我会重复几行.我在我的Core i3 CPU.4GB主内存和Windows 7平台上测试了以下代码.如果你在不同的硬件配置或使用不同的平台,那么你的输出可能会随着我的输出屏幕而变化, ...
- Windows DHCP最佳实践(四)
这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(四)中,我将分享以下DHCP最佳实践和技巧. 使用DHCP中继代理 防止恶意D ...
- 聊聊 React
都说 React 开发效率高,但效率高在哪呢?来细看看. 用 d3 写一个 List: const renderList = data => { d3.select("ul" ...
- linux DRM GPU scheduler 笔记
内核文档: Overview The GPU scheduler provides entities which allow userspace to push jobs into softw ...
- 使用modify修改内表
modify修改内表,有这样一种方式,MODIFY TABLE itab FROM wa [TRANSPORTING ..]. 然后这里的内表itab是有条件的,这个itab必须要有table key ...
- 并发编程常用工具类(一) countDownLatch和cyclicBarrier的使用对比
1.CountDownLatch countDownLatch的作用是让一组线程等待其他线程完成工作以后在执行,相当于加强版的join(不懂可以百度一下join的用法),一般在初始 ...
- Vue中组件间通信的方式
Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...
- WireShark 之 text2pcap
前言 本来想用 010Editer 的,看到破解教程头都大了,那么就用 WireShark 的 Text2pcap 吧! 正文 打开CMD控制台窗口,转到WireShark安装目录 ,此处可以shif ...