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

AWT/Swing Java Discussion :

Mise à jour automatique d'une image de fond avec JScrollPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut Mise à jour automatique d'une image de fond avec JScrollPane
    Bonjour à tous,

    Je viens de placer une image en fond de mon panel principal. Sur ce panel, il y a une table avec une 40ène de colonnes et donc j'ai mis un JScrollPane pour le défilement.
    Et voilà le soucis : lors du défilement de la scrollbar, l'image change et est à moitié coupée comme si elle ne se mettait pas à jour (et pourtant elle reste à la même place). Le seul moyen pour qu'elle se redessine correctement est de passer la souris sur l'onglet contenant la JTable.

    Ma question serait : Comment peut forcer le repaint du panel principal ?

    Montrer mon problème en image sera je pense plus parlant :
    Au lancement de l'application tout est normal :

    Juste après avoir fait défilé vers la droite avec la JScrollBar :

    Juste après avoir passé le curseur sur l'en-tête de l'onglet, tout est redevenue comme avant (comme si ça avait activé le repaint) :


    Voici le source du JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    // ////////////////////////////////////////////////////////////////////////
    // Copyright © 2011 Jérémy Chevrier
    //
    // This file is part of JCohorte.
    //
    // JCohorte is free software: you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation, either version 3 of the License, or
    // (at your option) any later version.
    //
    // JCohorte is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with JCohorte. If not, see <http://www.gnu.org/licenses/>.
    // ////////////////////////////////////////////////////////////////////////
     
    /**
     * 
     */
    package view;
     
    import java.awt.Graphics;
     
    import javax.swing.JComponent;
     
    import loading.LoadingFiles;
     
    /**
     * @author j&eacute;r&eacute,my Chevrier
     * 
     */
    public class Container extends JComponent {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	///////////////
    	// Attributs //
    	///////////////
     
    	//////////////////
    	// Constructeur //
    	//////////////////
     
    	//////////////
    	// Méthodes //
    	//////////////
    	/** 
             * Surcharge de la fonction paintComponent() pour afficher notre image 
             */
    	public void paintComponent (Graphics g) {
    		g.drawImage (LoadingFiles.getFiligrane (), (this.getWidth () - LoadingFiles.getFiligrane ().getWidth (getParent())) / 2, (this.getHeight () - LoadingFiles.getFiligrane ().getHeight (getParent())) / 2, null);
    	}
     
    	////////////////
    	// Accesseurs //
    	////////////////
    }
    Peut-être est-ce le getParent () qui provoque ce comportement.

    Si vous avez des idées, merci d'avance,
    Elhina

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut
    Citation Envoyé par elhina Voir le message
    Ma question serait : Comment peut forcer le repaint du panel principal ?
    t'as essayé?
    Suffit de mettre un listener sur le scrollbar du JScrollPane
    Vas voir ici, ça devrait t'aider:
    http://www.exampledepot.com/egs/java...oll_SpEvt.html

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Dans l'ensemble tu ne fournis de loin pas assez d'information pour pouvoir te répondre.

    Je ne sais pas où tu as placé ton panel affichant l'image, mais probablement pas au bon endroit.

    Voici un exemple tout à fait fonctionnel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    package table;
     
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
     
    public class TableBackgroundImageTest {
     
        private JTable table;
        private JFrame frame;
     
        public TableBackgroundImageTest() {
            String[][] tabData = new String[4][];
            String[] titles = new String[45];
            BufferedImage bim = null;
            try {
                bim = ImageIO.read(getClass().getResource("/im/chromium.png"));
            } catch (IOException e) {
                // TODO Bloc catch auto-généré
                e.printStackTrace();
            }
            BackgroundImagePanel imp = new BackgroundImagePanel(bim);
            for (int i = 0; i < 4; i++) {
                String[] temp = new String[45];
                for (int j = 0; j < 45; j++) {
                    temp[j] = "tatatatata";
                }
                tabData[i] = temp;
            }
            for (int j = 0; j < 45; j++) {
                titles[j] = "title " + j;
            }
     
            table = new JTable(tabData, titles);
            table.setOpaque(false);
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            JScrollPane jsp = new JScrollPane(table);
            jsp.setOpaque(false);
            jsp.getViewport().setOpaque(false);
            imp.add(jsp);
            frame = new JFrame();
            frame.add(imp);
            frame.setSize(1024, 768);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setVisible(true);
     
        }
     
        private class BackgroundImagePanel extends JComponent {
     
            private BufferedImage im;
     
            public BackgroundImagePanel(BufferedImage im) {
                this.im = im;
                setLayout(new BorderLayout());
            }
     
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                if (im != null) {
                    g.drawImage(im, getWidth() / 2 - im.getWidth() / 2, getHeight()
                            / 2 - im.getHeight() / 2, null);
                }
     
            }
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            new TableBackgroundImageTest();
     
        }
     
    }

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/06/2007, 12h03
  2. Mise à jour automatique d'une page Web
    Par mydev dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/04/2007, 10h58
  3. Réponses: 4
    Dernier message: 09/03/2007, 19h19
  4. [Conception] mise à jour automatique d'une base de donné distante
    Par bipbip2006 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/06/2006, 16h45
  5. Mise à jour automatique d'une table access via un .xls
    Par infratunes dans le forum Access
    Réponses: 4
    Dernier message: 05/04/2006, 18h33

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