Flux rss
Rechercher : dans
Par :

JProgressBar java

nico, le mardi 1 août 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

1

HackTrack, le jeudi 10 août 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 jeudi 10 août 2006 à 14:32:29

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
Java - Premier programme 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... www.commentcamarche.net/contents/java/javaprem.php3
Java - Les types de données 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... www.commentcamarche.net/contents/java/javatype.php3
J2EE - Java 2 Enterprise Edition Introduction 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... www.commentcamarche.net/contents/j2ee/j2ee-intro.php3
[Firefox] plugin Java Jre de SunA) 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... www.commentcamarche.net/faq/sujet-1824-firefox-plugin-java-jre-de-sun
Installer Java sous UbuntuPar 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 ... www.commentcamarche.net/faq/sujet-5400-installer-java-sous-ubuntu
Java Runtime MachineJava Runtime Machine Certains sites internet mais aussi certains programmes requièrent la présence de la Java Runtime Machine (JRM) pour exécuter les applets Java. Si vous n'avez pas, ou plus, cette Java Runtime Machine,... www.commentcamarche.net/faq/sujet-640-java-runtime-machine
Lire un fichier texte en java (Résolu)Salut ! je voudrai lire un fichier texte ligne par ligne en java mais je ne sais pas comment faire. Merci d'avance Nathalie www.commentcamarche.net/forum/affich-590149-lire-un-fichier-texte-en-java
Connection a Mysql via java (Résolu)Salut les gens, Je commence en java alors soyez gentils plzzzzz :-) J'essai de me connecter a ma base de donner Mysql en passant par un programme en java développé sous eclipse dont voici le code : import java.sql.*; class affichage{ public static... www.commentcamarche.net/forum/affich-2658844-connection-a-mysql-via-java
Télécharger Java Runtime EnvironmentJava 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... www.commentcamarche.net/telecharger/telecharger-34055318-java-runtime-environment
Télécharger Cavaj Java DecompilerCavaj Java Decompiler est un éditeur gratuit de code Java. Il permet de recomposer le code source Java d'un fichier CLASS. Il prend en charge la décompilation des applets Java, des archives ZIP et JAR. Le code source Java obtenu est précis. Il intègre... www.commentcamarche.net/telecharger/telecharger-34056787-cavaj-java-decompiler
Télécharger Java ToolsJava Tools est un IDE très léger pour la création, la compilation, l'exécution et le débogage des applications Java et des applettes. L'outil inclus des points et des clics d'accès aux commandes Java, aux documents, au répertoire et aux fichiers. Il... www.commentcamarche.net/telecharger/telecharger-34056297-java-tools
Introduction aux Java Server PagesPrésentation des Java Server Pages Les JSP (Java Server Pages) sont un standard permettant de développer des applications Web interactives, c'est-à-dire dont le contenu est dynamique. C'est-à-dire qu'une page web JSP (repérable par l'extension... www.commentcamarche.net/contents/jsp/jspintro.php3
Java: les variablesLe 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... www.commentcamarche.net/contents/java/javavar.php3
Java - L'API JDBCIntroduction à JDBC La technologie JDBC (Java DataBase Connectivity) est un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). L'accès aux bases de données avec... www.commentcamarche.net/contents/java/javajdbc.php3