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

Composants Java Discussion :

JScrollPane taille dynamique


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 55
    Par défaut JScrollPane taille dynamique
    Bonjour,

    Je vous écris car j'ai un vrai problème avec le JSrollPane.

    Voici la situation :
    J'ai un composant TestJSP (qui hérite de JPanel) que je veux placer dans le layer POPUP d'une fenetre.
    La position et la longueur de ce composant TestJSP dépendent des dimensions de le fenêtre, mais AUSSI du texte du JEditorPane contenu dans ce TestJSP . Lorsque la fenêtre est redimensionnée les dimensions de son contenu doit être mis à jour.

    L'élément TestJSP contient un JScrollPane qui lui meme un JEditorPane.

    Le problème est que jsp (le JScrollPane) n'affiche jamais complètement jep (le JEditorPane)
    J'ai essayé les méthodes jsp.revalidate et jep.setPreferredSize, mais sans succès.

    Je ne sais vraiment pas ce qui ne va pas.

    Ci -dessous se trouve le code, où je n'ajoute que le JEditorPane dans le TestJSP (dans ce cas tout s'affiche bien, mais j'ai besoin d'un JScrollPane car il y a une taille limite maximale pour le TestJSP ).
    Tout ce qui concerne le JScrollPane est mis en commentaires (Il suffit de décommenter pour que TestJSP contienne à nouveau un JScrollPane).


    En espérant que vous pourrez m'aidez car c'est la seule partie de mon projet qui me pose un problème et que j'ai ben du mal à trouver de la documentation à ce propos.

    Le code ci-dessous se trouve un code court qui présente mon problème.

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     package testSizeJSP2pack;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;
     
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.JLayeredPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
     
    public class TestJSP extends JPanel{
     
     
    	private JFrame f;
    	private JPanel bg;
    	JEditorPane jep;
    	JScrollPane jsp;
     
     
    	public TestJSP(JFrame f){
    		this.f=f;
    		this.jep= new JEditorPane();
    		jep.setContentType("text/html");
    		jep.setText(" test ");
     
     
    		//this.jsp=jsp =new JScrollPane(jep);
    		this.add(jep/*jsp*/,
    				new GridBagConstraints(0,0,1,1,1,1, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)
    		);
    		bg= new JPanel();
    		bg.setBackground(Color.red);
    		bg.setPreferredSize(new Dimension(400,400));
    		this.f.getContentPane().add(bg, BorderLayout.CENTER);
    		f.getLayeredPane().addComponentListener(this.topLevelContainerListener);
    		f.getLayeredPane().add(this,JLayeredPane.POPUP_LAYER);	
     
    		f.pack();
    		f.setVisible(true);
    	}
     
    	 final ComponentAdapter topLevelContainerListener = new ComponentAdapter(){
    		public void componentResized(ComponentEvent e){
     
    			setPosition();
    			}
    	};
     
     
    	public static void main(String[] args){
    		JFrame f = new JFrame();
     
     
    		TestJSP t = new TestJSP(f); 
    		t.jep.setText("<html>Bonjour  <br> je voudrais <br> une canette SVP </html>");
     
    		t.jep.setPreferredSize(t.jep.getPreferredSize());
    		//t.jsp.revalidate();
    		t.setPosition();
     
    	}
     
    	public void setPosition(){
     
    		this.jep.setPreferredSize(jep.getPreferredSize());
    		//this.jsp.revalidate();
     
     
    		// La position du panneau t se calcule à partir du milieu de la fenetre qui la contient
    		int xDroit = (int)(this.bg.getWidth()/2.0);		//Extrémité droite du panneau à afficher
    		int yBas =  (int) (this.bg.getHeight()/2.0);	//Extrémité basse du panneau à afficher
     
    		int xGauche = (int) (xDroit - this.getPreferredSize().getWidth());
    		int yHaut = (int) (yBas - this.getPreferredSize().getHeight());
     
     
    		System.out.println("xG "+ xGauche +" xD "+ xDroit);
    		System.out.println("yT "+ yHaut +" yB "+ yBas);
     
    		System.out.println("largeur "+ this.getPreferredSize().getWidth() + " longueur "+ this.getPreferredSize().getHeight());
    		System.out.println("largeur jep "+ this.jep.getPreferredSize().getWidth() + " longueur jep "+ this.jep.getPreferredSize().getHeight());
     
     
    		if(xGauche<0){
    			xGauche = 0;
     
    		}
     
    		if(yHaut<0){
    			yHaut = 0;
     
    		}
     
    		int longueur = xDroit - xGauche;
    		int largeur = yBas - yHaut;
     
     
     
    		this.setBounds(xGauche, yHaut, largeur, longueur);
    		this.jep.setPreferredSize(jep.getPreferredSize());
    		//this.jsp.revalidate();
    		//this.revalidate();
     
    	}
     
     
    }


    [EDIT] : Si je mes jsp.setPreferredSize(new Dimension(200,200)) par exempe, le résultat est convenable mais je prefererais que la taille du JScrollPane s'adapte le plus possible au texte. (Tout en ayant une taille limite)

  2. #2
    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
    La solution est d'arrêter de faire du layout null + setBounds (un des worst practice au niveau layout en Swing) et d'utiliser un vrai layout manager.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 55
    Par défaut
    Ah ok merci ,

    je pensais pas qu'on pouvait utiliser un layout avec un JlayeredPane

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

Discussions similaires

  1. div non superposés et de taille dynamique
    Par ibtisss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/04/2006, 11h56
  2. [HTML] DIV avec taille dynamique ?
    Par graphicsxp dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2006, 15h42
  3. [JScrollPane] Affichage dynamique des barres de scroll
    Par Atharendil dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/01/2006, 21h07
  4. taille dynamique des cases dans état
    Par exter666 dans le forum Access
    Réponses: 14
    Dernier message: 09/09/2005, 15h30
  5. [JTABLE] taille dynamique = F°(String.length)
    Par tripop dans le forum Composants
    Réponses: 15
    Dernier message: 13/01/2005, 17h07

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