Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package laba4;
- import javax.swing.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Queue;
- import java.util.concurrent.TimeUnit;
- public class Main extends JFrame {
- private JProgressBar progressBar1,progressBar2;
- private JButton start, stop;
- private JProgressBar current;
- private Queue<JProgressBar> queue;
- private Task task;
- public Main() {
- createAndShowGUI();
- queue = new LinkedList<>();
- queue.add(progressBar1);
- queue.add(progressBar2);
- }
- private void createAndShowGUI() {
- JPanel panel = new JPanel();
- progressBar1 = new JProgressBar();
- progressBar1.setValue(0);
- progressBar1.setStringPainted(true);
- progressBar2 = new JProgressBar();
- progressBar2.setValue(0);
- progressBar2.setStringPainted(true);
- start = new JButton("Start");
- start.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- start.setEnabled(false);
- stop.setEnabled(true);
- task = new Task();
- current = queue.poll();
- task.execute();
- }
- });
- stop = new JButton("Stop");
- stop.setEnabled(false);
- stop.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- task.cancel(true);
- current.setValue(0);
- stop.setEnabled(false);
- start.setEnabled(true);
- queue.offer(current);
- }
- });
- panel.add(progressBar1);
- panel.add(progressBar2);
- panel.add(start);
- panel.add(stop);
- setContentPane(panel);
- setSize(100, 100);
- setTitle("Progress bar");
- setLocationRelativeTo(null);
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- }
- public static void main(String[] args) {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- Main main = new Main();
- main.setVisible(true);
- }
- });
- }
- class Task extends SwingWorker<Void, Integer> {
- private int counter;
- @Override
- protected Void doInBackground() throws Exception {
- while (counter < 100) {
- if (isCancelled()) {
- counter = 0;
- return null;
- }
- try {
- TimeUnit.MILLISECONDS.sleep(120);
- counter++;
- publish(counter);
- } catch (InterruptedException ignored) {}
- }
- return null;
- }
- @Override
- protected void process(List<Integer> chunks) {
- current.setValue(counter);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement