IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[print] changer la couleur de fond pour pendant l'impression


Sujet :

Windows

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [print] changer la couleur de fond pour pendant l'impression
    Mon application permet de visualiser des graphiques sur fond gris et de les imprimer. Or imprimer du gris est très couteux en cartouche d'encre...

    Comment faire pour forcer la couleur de fond de mes composants à blanc uniquement pour l'impression, sans que le changement gris/blanc ne se voit à l'écran ?

    J'ai déjà essayé la solution suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Color bg = monComposant.getBackground();
    monComposant.setBackground(Color.white);
    // impression du composant
    monComposant.setBackground(bg);
    Mais l'impression étant assez longue, le composant est rafraichi à l'écran et on voit le passage gris/blanc, puis blanc/gris...

    Merci pour les pistes que vous pourrez m'indiquer.

  2. #2
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Je pense qu'il faudrait que tu fasses ton setBackGround sans rafraichir l'affichage (repaint() ou autre) et lancer ton impression...non?
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En fait je ne demande aucun rafraichissement... l'impression étant longue, le composant se rafraichit apparemment tout seul suite au setBackground, et on voit à l'écran le passage en fond blanc...

    J'ai essayé également d'utiliser la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monComposant.setIgnoreRepaint();
    mais sans succès...

  4. #4
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par s@ndy
    En fait je ne demande aucun rafraichissement... l'impression étant longue, le composant se rafraichit apparemment tout seul suite au setBackground, et on voit à l'écran le passage en fond blanc...

    J'ai essayé également d'utiliser la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monComposant.setIgnoreRepaint();
    mais sans succès...
    le composant qui se rafraichit tout seul ??
    Alors que tant de posts posent la question "comment faire pour rafraichir ma fenetre" ?!!
    LOOOOOL
    Revois ton code, à mon avis tu appelles une methode qui raffraichit ta JFrame...
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Effectivement, le setBackground() du composant graphique utilisé (JCChart fourni par Quest Software) est surchargé pour forcer le rafraichissement automatique du graphe ...

    Ca me donne une bonne piste, merci de ton aide

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En creusant dans les sources du jdk (j'utilise le jdk 1.4.2), on se rend compte que le setBackground de JComponent entraine lui-aussi un rafraichissement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void setBackground(Color bg) {
    	Color oldBg = getBackground();
    	super.setBackground(bg);
    	if ((oldBg != null) ? !oldBg.equals(bg) : ((bg != null) && !bg.equals(oldBg))) {
    	    // background already bound in AWT1.2
    	    repaint();
    	}
    }
    Donc je suis coincée... dans la mesure où mon impression est longue, le repaint du setBackground(Color.white) a le temps de se faire avant l'appel au deuxième setBackground pour un retour à la couleur de fond initiale...

    Voilà ma conclusion (en espérant de pas dire encore des bêtises!), il faut que je trouve une autre solution, comme rendre invisible mes graphes pendant l'impression ...

  7. #7
    KKI
    KKI est déconnecté
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Comment imprime-tu ton composant ?

    avec print(Graphics g) ou printAll(Graphics g) ou d'une autre manière ?

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Mon composant implémente l'interface java.awt.print.Printable et donc la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
    // En gros je fais...
    paint(graphics);
    }

  9. #9
    Membre régulier Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    Mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : Mars 2004
    Messages : 115
    Points : 113
    Points
    113
    Par défaut re
    ce que je vais dire va peut-être paraitre stupide, mais à tu pensé à utiliser un thread pour ton impression??
    Waldo2188

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 73
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Est-ce que tu peux faire un clone de ton objet:
    soit avec la méthode clone()
    soit en instanciant un autre objet et en recopiant les variables membres

    Si oui fait çà et modifie le fond de ton clone
    et imprime le :

    principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
    		LaClasse objetClone=this.clone();
    		objetClone.setBackground(Color.WHITE);
    		objetClone.paint(graphics);
    	}
    Cordialement,
    PS : N'oublie pas le tag [Résolu] (en cliquant sur http://pouiller.eclipse.free.fr/avatar/resolu.gif), si ton problème est résolu...

  11. #11
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour tous ceux qui m'ont donné des conseils, mais finalement, en accord avec mon client, je vais rendre invisible la fenêtre à imprimer et afficher un message du genre "impression en cours..."; ainsi je pourrais switcher la couleur de fond pendant l'impression...

    s@ndy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. changer la couleur du fond pour un JOptionPane
    Par samarqand dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 29/08/2014, 11h37
  2. Réponses: 3
    Dernier message: 01/06/2006, 09h49
  3. [POO] Changer la couleur de fond d'un tableau
    Par Netoman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2004, 20h12
  4. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo