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 :

Avoir une image en fond sous un JScrollPane


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Avoir une image en fond sous un JScrollPane
    Bonsoir,

    J'ai un JTextarea opaque -> (textArea = new JTextArea(1,5))
    J'ai associé à un JFrame une image en fond. -> (frame = new JFrame) et frame.setContentPane(new MyPanel())
    nb: MyPanel est une méthode pour afficher une image

    Quand j'associe le JFrame et le JTextarea, je vois l'image en fond.
    -> (frame.add(textArea))

    J'ai ajouté au JTextarea, un JScrollPane (opaque lui aussi)
    -> (ascenseur = new JScrollPane(textArea))

    Quand j'associe ce JTextarea (avec son jScrollPane) au JFrame, j'ai une fenetre blanche. (normal j'ai pas associé l'image au JFrame)
    -> (frame.setContentPane(ascenseur)

    Commen avoir le JFrame avec son image de fond + JTextArea (avec son JScrollPane) ?

    merci pour les conseils

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    Le JScrollPane ne contient pas directement le JTextArea. Il contient en fait un JViewPort qui contient le JTextArea (tout est explique dans la javadoc de JScrollPane !).

    Il te faut donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    area.setOpaque(false);
    scrollpane.setOpaque(false)
    scrollpane.getViewport().setOpaque(false);
    De plus ta derniere instruction indique que tu remplaces ton panel qui affiche ton image par ton scrollpane... donc l'image n'est de toute maniere plus affichee. Il te faudra plutot faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    frame.setContentPane(imagePanel);
    frame.setLayout(new BorderLayout());
    frame.add(scrollpane, BorderLayout.CENTER);

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    merci pour votre aide

    (je débute en java)

    Cela marche parfaitement bien.

    Comme je fais du glisser/déposer sur le JFrame (en fait c'est le JTextArea qui est sensible via la méthode : .setDragEnabled(true), j'aimerais (mais j'ai un doute) que ce fond change (une autre image par exemple) lors du dépôt d'un fichier et que le fond d'origine revienne à la fin du traitement.

    J'ai essayé en "jouant" avec la méthode setOpaque(true/false) mais ce fond ne se re-dessine pas entièrement. (un tout petit bout en fait).

    A défaut, est-ce-qu'il existe un état transparent à 50% ?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    oui ... et non...

    Tu peux mettre en couleur de fond une Color semi transparence (couleur dont l'alpha est < 255 - les couleur solides ayant un alpha == 255). Mais quand tu fais cela il faut declarer setOpaque(false)... mais dans ce cas le fond de la zone ne se peint plus... etc... donc il faut redefinir paintComponent() pour forcer la peinture du fond en cas d'utilisation d'une couleur non-completement transparente, meme quand isOpaque() == false ... etc... bref bon courage ! C'est faisable mais pas forcement pratique surtout si tu debutes.

    Tu dis qu'un petit bout du fond se redessine, peut-etre devrais-tu essayer de remonter dans la hierarchie des composants et de forcer le reaffichage (via repaint()) du parent ou du top parent (la fenetre) de ta zone de texte. Voir divers methodes pour faire cela dans SwingUtilities.

    Il faut voir aussi si tes mecanismes de traitement du copier/coller ne bloquent pas l'EDT (la thread chargee de la propagation des evenements et de l'affichage) empechant un reaffichage complet de l'interface. SwingUtilities.invokeLater() et SwingWorker (java 6+, on peut trouver des classes compatibles 1.3+ sur le net) sont tes amis pour deferrer des traitement en plusieure etapes genre:

    ->nouveau cycle EDT
    - reception de l'evenement du coller
    ->nouveau cycle EDT
    - reafficher l'interface
    ->nouveau cycle EDT
    - faire le coller
    ->nouveau cycle EDT
    - reafficher l'interface

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    merci

    j'ai tenté un set.Opaque(false) sur un JTextArea et ça marche quand je dépose un fichier (glisser/déposer). Je change le set.Opaque(true) pour revenir à l'état initial.

    Ca marche au premier glisser/déposer mais pas pour les suivants : curieux !

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/02/2012, 15h58
  2. Réponses: 2
    Dernier message: 06/04/2011, 18h17
  3. créer un lien hypertexte sous une image de fond
    Par Ouija33 dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 24/10/2007, 16h34
  4. Insérer une image de fond sous un graphique
    Par sango85 dans le forum MATLAB
    Réponses: 5
    Dernier message: 05/03/2007, 17h55
  5. Comment mettre une image en fond de JFrame
    Par marc26 dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2004, 17h57

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