Ti posto un'esempio simile a quello online. In grassetto le parti significative. Chiedi pure cosa non ti e' chiaro.
codice:import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ProgressBar extends JFrame implements ActionListener { private JButton startButton; private JPanel panel; private JProgressBar progressBar; private Task task; //Classe thread apposita per swingSwing class Task extends SwingWorker<Void, Void> { //Questo e' il metodo che aggiorna la barra viene eseguito(una sola volta) //in background e non blocca l'applicazione public Void doInBackground() { int progress = 0; while (progress < 100) { try { Thread.sleep(100); } catch (InterruptedException ignore) {} //Uso un random, nel tuo caso aggiorni il valore come preferisci progress += (int)(Math.random()*10); progressBar.setValue(progress); } startButton.setEnabled(true); return nul; } } public ProgressBar() { super("Test"); startButton = new JButton("Start"); startButton.addActionListener(this); progressBar = new JProgressBar(0, 100); progressBar.setValue(0); progressBar.setStringPainted(true); panel = new JPanel(); panel.add(startButton); panel.add(progressBar); this.setContentPane(panel); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.pack(); this.setVisible(true); } public void actionPerformed(ActionEvent evt) { startButton.setEnabled(false); //Alla pressione del bottone faccio partire il thread progressBar.setValue(0); task = new Task(); task.execute(); } public static void main(String[] args) { new ProgressBar(); } }

Rispondi quotando