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 :

probleme affichage : bonne utilisation de JScrollPane?


Sujet :

AWT/Swing Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut probleme affichage : bonne utilisation de JScrollPane?
    Bonjour à tous,

    Je suis en train de créer ma première fenêtre graphique et le résultat est plutôt pas mal à une exception près.
    Je dois afficher des séquences ADN alignées. Pour cela j'utilise un JSplitPane qui me permet d'avoir à gauche mes identifiants et à droite mes séquences. Pour les séquences j'ai un JScrollPane horizontal afin qu'une séquence entière (entre 1000 et 2000 caractères) s'affiche sur une seule ligne. Tout fonctionne bien si j'ai jusqu'à 15 séquences :
    Nom : 1.png
Affichages : 242
Taille : 53,8 Ko

    Par contre, il suffit que j'en rajoute une de plus pour que plus rien ne fonctionne : au lieu d'afficher les 15 premières sur une ligne il fait un retour à la ligne automatique après avoir à peine dépassé la taille horizontale visible de la fenêtre.

    Nom : 2.png
Affichages : 213
Taille : 100,1 Ko

    Voici le code , j'espère ne pas faire trop de bêtises en postant le message c'est la toute première fois que j'appelle à l'aide sur un forum
    Un grand merci à ceux qui tenteront de m'expliquer le souci.

    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
     
     
    public class FenetreAlignement extends JFrame {
      private JSplitPane split;
    	private MyTextPane textPaneSeq =  new MyTextPane();
    	private MyTextPane textPaneID =  new MyTextPane();
      private MyJScrollPane scroll;
    	private JPanel panId = new JPanel();      
      private JPanel panSeq = new JPanel();
    	private ArbreAlignement arbre;
     
    public FenetreAlignement(ArbreAlignement arbre) {
    	this("ALignement multiple de sequences",300000,300000,false,arbre);
    }
     
    public FenetreAlignement(String titre, int largeur, int hauteur, boolean boolExit, ArbreAlignement arbre) {      
    		this.arbre = arbre;       
        this.setTitle(titre);
        this.setSize(largeur,hauteur);
        /* centrage */
        this.setLocationRelativeTo(null);
    		if(boolExit == true)
        	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
    		else
    			this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		int taille;
    		char c;
    		HashMap<Integer,SequenceAlignement> sequencesInitiales = arbre.getSequences();
    		ArrayList<String> seq = arbre.getResultatFinal();
     
    		StyledDocument doc = textPaneSeq.getStyledDocument();
    		StyledDocument docID = textPaneID.getStyledDocument();
     
     
    		Color cA = new Color(64,128,255);
    		Attribut styleA = new Attribut("Courier new",18,cA);
    		Attribut styleT = new Attribut("Courier new",18,Color.PINK);
    		Attribut styleG = new Attribut("Courier new",18,Color.CYAN);
    		Attribut styleC = new Attribut("Courier new",18,Color.MAGENTA);
    		Attribut styleDefaut = new Attribut("Courier new",18,Color.WHITE);
     
    		try {
    			for(String s : seq) {
    				taille = s.length();
    				for(int i = 0; i < taille; i++) {
    					c = s.charAt(i);
    					if(c == 'A') {
    						doc.insertString(doc.getLength(),"A",styleA);
    					}
    					else if(c == 'G') {
    						doc.insertString(doc.getLength(),"G",styleG);
    					}
    					else if(c == 'C') {
    						doc.insertString(doc.getLength(),"C",styleC);
    					}	
    					else if(c == 'T') {
    						doc.insertString(doc.getLength(),"T",styleT);
    					}	
    					else {
    						doc.insertString(doc.getLength(),Character.toString(c),styleDefaut);
    					}				
    				}
    				doc.insertString(doc.getLength(),"\n",styleDefaut);
    			}
    		}
    		catch(Exception e){}
     
    		try {		
    			for (HashMap.Entry<Integer, SequenceAlignement> entry :sequencesInitiales.entrySet()) {
    				docID.insertString(docID.getLength(),entry.getValue().getId(),styleDefaut);
    				docID.insertString(docID.getLength(),"\n",styleDefaut);
    			}
    		} 
    		catch (BadLocationException e){}	
     
    		scroll = new MyJScrollPane(textPaneSeq,JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panId, panSeq);
    		split.setDividerLocation(60);
    		split.setRightComponent(scroll);
    		split.setLeftComponent(textPaneID);
     
        this.getContentPane().add(split);
     
        this.setVisible(true);
     
    	}

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ta classe MyTextPane est-elle une classe qui étend JTextPane ? Si c'est le cas, tu peux empêcher le JTextPane de wrapper en redéfinissant sa méthode getScrollableTracksViewportWidth() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean getScrollableTracksViewportWidth() {
            return getUI().getPreferredSize(this).width <= getParent().getSize().width;
        }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Ta classe MyTextPane est-elle une classe qui étend JTextPane ? Si c'est le cas, tu peux empêcher le JTextPane de wrapper en redéfinissant sa méthode getScrollableTracksViewportWidth() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean getScrollableTracksViewportWidth() {
            return getUI().getPreferredSize(this).width <= getParent().getSize().width;
        }

    Merci pour ton aide! oui, MyTextPane etend bien JTextPane. j'ai ajouté ta méthode mais le résultat est toujours le même. Peut être que quelque chose dans mon code empêche son bon fonctionnement? Ou que j'emboîte mal mes objets entre eux pour la fenêtre? Ou dans le mauvais ordre? Comme c'est ma première fenêtre j'ai quelques incertitudes à ce sujet j'avoue avoir un peu galéré.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il me faudrait le code de MyJScrollPane. Cela dit, je ne vois pourquoi il y aurait besoin de faire une classe spécifique.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Il me faudrait le code de MyJScrollPane. Cela dit, je ne vois pourquoi il y aurait besoin de faire une classe spécifique.
    En fait c'est en menant mon enquête sur les forums, certains conseillaient de faire des override donc j'ai essayé, sans succès. pour les deux méthodes que je retourne false/false true/true false/true ou true/false ça n'a rien donné

    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
    class MyJScrollPane extends JScrollPane {
        public MyJScrollPane(){
            super();
        }
     
    		public MyJScrollPane(Component view, int vsbPolicy, int hsbPolicy) {
    			super(view,vsbPolicy,hsbPolicy);
    		}
     
        public boolean getScrollableTracksViewportWidth(){
            return false;
        }
     
        public boolean getScrollableTracksViewportHeight(){
            return false;
        }
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ta classe MyScrolPane ne sert à rien (elle ne modifie pas le comportement de la classe JScrollPane). Les 2 méthodes ne sont pas des méthodes standards et, donc, ne seront pas appelées par Swing. En fait, il s'agit bien de bonnes méthodes, mais (comme dans ma première réponse) il s'agit de les implémenter sur le panel qu'on met dans le viewport, pas sur le scrollpane.

    Il faudrait que je creuse plus ton code pour comprendre ce qui ne va pas. Il y a un point de toute manière qui doit poser problème, c'est le décalage de scroll vertical entre partie gauche et droite, parce que la hauteur n'est pas tout à fait la même si l'un des panels à une scrollbar verticale et pas l'autre (sans même parler de la synchronisation). M'est avis que ça doit être plus facile à gérer par JTable.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Ta classe MyScrolPane ne sert à rien (elle ne modifie pas le comportement de la classe JScrollPane). Les 2 méthodes ne sont pas des méthodes standards et, donc, ne seront pas appelées par Swing. En fait, il s'agit bien de bonnes méthodes, mais (comme dans ma première réponse) il s'agit de les implémenter sur le panel qu'on met dans le viewport, pas sur le scrollpane.

    Il faudrait que je creuse plus ton code pour comprendre ce qui ne va pas. Il y a un point de toute manière qui doit poser problème, c'est le décalage de scroll vertical entre partie gauche et droite, parce que la hauteur n'est pas tout à fait la même si l'un des panels à une scrollbar verticale et pas l'autre (sans même parler de la synchronisation). M'est avis que ça doit être plus facile à gérer par JTable.
    Citation Envoyé par joel.drigo Voir le message
    Il y a un point de toute manière qui doit poser problème, c'est le décalage de scroll vertical entre partie gauche et droite, parce que la hauteur n'est pas tout à fait la même si l'un des panels à une scrollbar verticale et pas l'autre
    Du coup ce problème que tu soulèves pourrait expliquer que tout fonctionne à merveille sur mes 15 premières séquences et que pour un ajout de plus le scrollpane horizontal soit completement abandonné au profit d'un vertical?

Discussions similaires

  1. probleme d'affichage avec JTable et JScrollPane
    Par semaj_james dans le forum Composants
    Réponses: 2
    Dernier message: 16/11/2007, 17h09
  2. La bonne utilisation de TIBTransaction
    Par jibe74 dans le forum Connexion aux bases de données
    Réponses: 15
    Dernier message: 29/01/2005, 16h18
  3. [Tomcat][sleep]De la bonne utilisation du sleep??
    Par Titom dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 11/01/2005, 10h25
  4. Problème avec l'utilisation de la commande system awk
    Par vbcasimir dans le forum Linux
    Réponses: 3
    Dernier message: 05/10/2004, 16h18
  5. utilisation de JScrollPane
    Par Gimly dans le forum Composants
    Réponses: 3
    Dernier message: 25/06/2004, 16h23

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