Java Swing组件实现进度监视功能示例

网友投稿 257 2023-02-18


Java Swing组件实现进度监视功能示例

本文实例讲述了java Swing组件实现进度监视功能。分享给大家供大家参考,具体如下:

实例一:http://

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ProgressMonitor;

import javax.swing.Timer;

public class TestProgressMonitor {

Timer timer;

public void init() {

final SimulatedTargetMi target = new SimulatedTargetMi(1000);

// 以启动一条线程的方式来执行一个耗时的任务

final Thread targetThread = new Thread(target);

targetThread.start();

// 创建进度对话框

final ProgressMonitor dialog = new ProgressMonitor(null,

"等待任务完成,任务完成之前请不要关闭窗口,否则将取消当前操作...", "已完成:0.00%", 0,

target.getAmount());

// 创建一个计时器

timer = new Timer(300, new ActionListener() {

public void actionPerformed(ActionEvent e) {

// 以任务的当前完成量设置进度对话框的完成比例

dialog.setProgress(target.getCurrent());

dialog.setNote("已完成:" + target.getPercent());

// 如果用户单击了进度对话框的”取消“按钮

if (dialog.isCanceled()) {

// 停止计时器

timer.stop();

// 中断任务的执行线程

targetThread.interrupt();

// 系统退出

System.exit(0);

}

}

});

timer.start();

}

public static void main(String[] args) {

new TestProgressMonitor().init();

}

}

// 模拟一个耗时的任务

class SimulatedTargetMi implements Runnable {

// 任务的当前完成量

private volatile int current;

// 总任务量

private int amount;

public SimulatedTargetMi(int amount) {

current = 0;

this.amount = amount;

}

public int getAmount() {

return amount;

}

public int getCurrent() {

return current;

}

// run方法代表不断完成任务的过程

public void run() {

while (current < amount) {

try {

Thread.sleep(50);

} catch (InterruptedException e) {

}

current++;

}

}

public String getPercent() {

return String.format("%.2f", 100.0 * current / amount) + "%";

}

}

运行效果:

实例二:

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JProgressBar;

import javax.swing.Timer;

public class TestJProgressBar {

JFrame frame = new JFrame("jb51.net - 当前进度指示...");

// 创建一条垂直进度条

JProgressBar bar = new JProgressBar(JProgressBar.HORIZONTAL);

JLabel tipLabel = new JLabel("提示:", JLabel.LEFT);

JLabel contentLabel = new JLabel("任务完成之前请不要关闭窗口,否则将取消当前操作...", JLabel.LEFT);

JLabel statusLabel = new JLabel(" ", JLabel.CENTER);

public void init() {

frame.setLayout(new FlowLayout());

frame.setResizable(false);

tipLabel.setFont(new Font("Serif", Font.PLAIN, 14));

contentLabel.setFont(new Font("Serif", Font.PLAIN, 14));

statusLabel.setFont(new Font("Serif", Font.PLAIN, 14));

JPanel panel = new JPanel();

// fr5.setBorder(new TitledBorder("BoxLayout - Y"));

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

panel.add(tipLabel);

panel.add(Box.createVerticalStrut(2));

panel.add(contentLabel);

panel.add(Box.createVerticalStrut(7));

panel.add(bar);

// panel.add(Box.createVerticalGlue());

panel.add(Box.createVerticalStrut(2));

panel.add(statusLabel);

frame.add(panel, 0);

final SimulatedTarget target = new SimulatedTarget(1000);

// 以启动一条线程的方式来执行一个耗时的任务

final Thread thread = new Thread(target);

thread.start();

// 设置在进度条中绘制完成百分比

bar.setStringPainted(true);

// bar.setPreferredSize(new Dimension(100, 18));

// 设置进度条的最大值和最小值,

bar.setMinimum(0);

// 以总任务量作为进度条的最大值

bar.setMaximum(target.getAmount());

final Timer timer = new Timer(300, new ActionListener() {

public void actionPerformed(ActionEvent e) {

// 以任务的当前完成量设置进度条的value

bar.setValue(target.getCurrent());

if (target.getAmount() <= target.getCurrent()) {

statusLabel.setText("处理完成,oh yes!");

}

}

});

timer.start();

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

AMrKxSBH thread.interrupt();

timer.stop();

// 系统退出

System.exit(0);

}

});

// 该代码依据放置的组件设定窗口的大小使之正好能容纳你放置的所有组件

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) {

new TestJProgressBar().init();

}

}

// 模拟一个耗时的任务

class SimulatedTarget implements Runnable {

// 任务的当前完成量

private volatile int current;

// 总任务量

prAMrKxSBHivate int amount;

public SimulatedTarget(int amount) {

current = 0;

this.amount = amount;

}

public int getAmount() {

return amount;

}

public int getCurrent() {

return current;

}

// run方法代表不断完成任务的过程

public void run() {

while (current < amount) {

try {

Thread.sleep(20);

} catch (InterruptedException e) {

}

current++;

}

}

public String getPercent() {

return String.format("%.1f", 100.0 * current / amount) + "%";

}

}

运行结果:

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java可以如何实现文件变动的监听的示例
下一篇:Hibernate初体验及简单错误排除代码详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~