java制作进度条,Java制作进度条

【效果图】

2c898a1ecd4c9622250e93dacbb6e026.png

【描述】

进度条宽度保持和窗口宽度一致,进度最小值为0,最大值为100,每100毫秒进度值+1,进度条中间显示进度百分比

【代码】

package test;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Test extends JFrame {

private JPanel panel;

private JProgressBar progressBar;

private int value = 0;

private static final int PROGRESS_MIN_VALUE = 0;

private static final int PROGRESS_MAX_VALUE = 100;

private static final int PROGRESS_HEIGHT = 20;

private Timer timer;

public Test() {

this.setBounds(10, 10, 300, 80);

// this.setExtendedState(JFrame.MAXIMIZED_BOTH); // 最大化

// this.setLocationRelativeTo(null);// 使窗口显示在屏幕中央

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel = new JPanel();

// panel.setBackground(new Color(228, 209, 168));

progressBar = new JProgressBar();

progressBar.setMaximum(PROGRESS_MAX_VALUE);

progressBar.setMinimum(PROGRESS_MIN_VALUE);

progressBar.setValue(value);

progressBar.setPreferredSize(getNewDimension());

// 监听窗口大小,设置进度条宽度为窗口宽度(但是对于最大化和还原窗口无效,原因未知)

this.addComponentListener(new ComponentAdapter() {

@Override

public void componentResized(ComponentEvent e) {

int width = getWidth();

// System.out.println("componentResized...width=" + width);

progressBar.setPreferredSize(getNewDimension());

}

});

// 监听窗口最大化和还原,设置进度条宽度为窗口宽度

this.addWindowStateListener(new WindowAdapter() {

@Override

public void windowStateChanged(WindowEvent state) {

if (state.getNewState() == 1 || state.getNewState() == 7) {

// System.out.println("窗口最小化");

} else if (state.getNewState() == 0) {

// System.out.println("窗口恢复到初始状态");

progressBar.setPreferredSize(getNewDimension());

} else if (state.getNewState() == 6) {

// System.out.println("窗口最大化");

progressBar.setPreferredSize(getNewDimension());

}

}

});

// 设置进度条中间显示进度百分比

progressBar.setStringPainted(true);

// 进度条进度的颜色

progressBar.setForeground(new Color(46, 145, 228));

// 进度条背景的颜色

progressBar.setBackground(new Color(220, 220, 220));

panel.add(progressBar);

this.add(panel);

// 定时器,每100毫秒进度值+1

timer = new Timer(100, new AbstractAction() {

@Override

public void actionPerformed(ActionEvent e) {

if (value >= PROGRESS_MAX_VALUE) {

// 结束定时器

timer.stop();

// System.out.println("------------value=" + value);

} else {

// 设置进度值

value++;

progressBar.setValue(value);

// System.out.println("actionPerformed...value=" + value);

}

}

});

timer.start();

this.setVisible(true);

}

public Dimension getNewDimension() {

return new Dimension(this.getWidth(), PROGRESS_HEIGHT);

}

public static void main(String[] args) {

new Test();

}

}

【说明】

上诉代码保留了之前测试的一些代码,已注释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值