Rechercher : dans
Par :

JProgressBar java

Dernière réponse le 10 aoû 2006 à 14:32:29 nico, le 1 aoû 2006 à 13:50:30 
 Signaler ce message aux modérateurs

Bonjour a tous,

soucis de JProgressBar et de Thread !
J'ai ecris un code qui lance une JProgressBar lorsque l'on clic sur un boutton ... La methode actionPerformed() reconnait mon boutton, et lance un nouveau thread pour l'update de la barre. Mais le soucis c'est que l'action de ce boutton ne se limite pas au lancement de la JProgressBar, et que celle-ci ne se met a jour qu'une fois que toute l'action liée au boutton est terminée !
Ce qui me parait contradictoire avec le fait que le thread devrait permettre de regler ce probleme !!

J'espere etre assez clair, en esperant que l'un de vous connaisse la solution !
merci

Meilleures réponses pour « JProgressBar java » dans :
Java - Premier programme Voir Première application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données Voir Les primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...
Java - Les packages VoirIntroduction aux packages La programmation Java consiste à créer des classes. Or, étant donné qu'un programme est généralement développé par une équipe de programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à bout)...
Java: les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans...

1

HackTrack, le 10 aoû 2006 à 09:10:14

Salut!

Pour les tâches qui durent longtemps, utilise la classe SwingWorker.


Plutôt que de t'en expliquer le principe de fonctionnement, effectue une recherche sur "SwingWorker" avec un moteur de recherche et tu trouveras des exemples et démos.

Si tu ne t'en sors pas, fais-moi signe via le forum et je t'enverrai un exemple complet.

;-)
HackTrack

Répondre à HackTrack

2

 nico, le 10 aoû 2006 à 14:32:29
  • +1

Merci !
En fait j'ai deja commencé a bosser dessus, mais sans passer pas SwingWorker !
J'ai un probleme lié a l'EDT et au fait que j'utilise des fonctions de dessins ... je met le code au cas ou si quelqu'un aurait une solution pour le faire marcher correctement !


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.Random;
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

public class TestProgressBar extends JFrame implements ActionListener {
    private JProgressBar jj;

    private DrawClass dc;
    private JButton b1;
    private final static int MAX_POINTS = 100;

    public TestProgressBar() {
        super();
        jj = new JProgressBar(0, MAX_POINTS);
        b1 = new JButton("Start");
        b1.addActionListener(this);
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(b1);

        dc=new DrawClass(jj);
	getContentPane().setLayout(new BorderLayout());
        getContentPane().add(buttonPanel, BorderLayout.WEST);
        getContentPane().add(dc, BorderLayout.CENTER);
	getContentPane().add(jj, BorderLayout.SOUTH);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                TestProgressBar dialog = new TestProgressBar();
                dialog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		dialog.setSize(500,500);
                dialog.setVisible(true);
            }
        });
    }
  
    public void actionPerformed(ActionEvent evt) {
        Object source = evt.getSource();
        if (source == b1) {
            b1.setEnabled(false);
	    dc.setAction();
            jj.setValue(0);

            Thread t = new Thread(new Runnable() {
                public void run() {
                    dc.repaint();
                }
            });
            t.start();
        }
    }



    class DrawClass extends JPanel{
	private JProgressBar jpb;
	private boolean action=false;
	Graphics2D g2;


	public DrawClass(JProgressBar j){
	    jpb=j;
	}

	private void printPoint(final Point p, final Color c) {
	    SwingUtilities.invokeLater(new Runnable() {
		    public void run() {
			g2.setColor(c);
			Rectangle2D.Float rd = new Rectangle2D.Float(p.x,p.y,5,5);
			g2.fill(rd);
			System.out.println("point add: " + p);
		    }
		});
	}

	public void setAction(){
	    action=true;
	}
	
	public void paint(Graphics g){
	    g2 =(Graphics2D)g;
	    if (action){
		g2.clearRect(0,0,getSize().width,getSize().height);
		generatePoints();
	    }
	    else
		g2.clearRect(0,0,getSize().width,getSize().height);
	}

	private Random r = new Random();
	
	private void generatePoints() {
	    for (int i = 0; i < MAX_POINTS; i++) {
		Point p = randomPoint();
		Color c = randomColor();
		printPoint(p,c);
		updateBar(i+1);
		
		System.out.println("n:" + i);
		if (!SwingUtilities.isEventDispatchThread()) {
		    try {
			Thread.sleep(20);
		    } catch (Exception e) {
			e.printStackTrace();
		    }
		} else {
		    System.err.println("generate Point from EDT");
		}
        }
	    SwingUtilities.invokeLater(new Runnable() {
		    public void run() {
                b1.setEnabled(true);
		    }
		});
	}

	private void updateBar(final int i) {
	    SwingUtilities.invokeLater(new Runnable() {
		    public void run() {
			jpb.setValue(i);
			jpb.repaint();
			System.out.println("bar updated: " + i);
		    }
		});
	}
	private Point randomPoint() {
	    return new Point(r.nextInt(getSize().width), r.nextInt(getSize().height));
	}
	
	private Color randomColor() {
	    return new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
	}
    }



}

Répondre à nico