2010-03-19 1 views
8

Si j'utilise un JTextArea avec MigLayout comme ceci:MigLayout JTextArea ne diminue pas quand il est utilisé avec linewrap = true

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); 
    this.setLayout(thisLayout); 
    { 
jLabel1 = new JLabel(); 
this.add(jLabel1, "cell 0 0"); 
jLabel1.setText("jLabel1"); 
    } 
    { 
jTextArea1 = new JTextArea(); 
this.add(jTextArea1, "cell 0 1 2 1,growx"); 
jTextArea1.setText("jTextArea1"); 
jTextArea1.setLineWrap(false); 
    } 

alors le JTextArea augmente et diminue parfaitement lors du redimensionnement de la fenêtre. Lorsque je place le linewrap à true, JTextArea ne rétrécit pas lorsque je redimensionne la fenêtre. J'apprécierais beaucoup toute aide. Merci

Marcel

+0

Une solution simple et rapide vous pouvez trouver ici! http://stackoverflow.com/a/7833439/2530822 – TotoliciCristian

Répondre

8

En effet, ont automatiquement l » JTextArea leur largeur minimale définie à chaque fois qu'ils Redimensionner. Les détails sont disponibles sur le MigLayout forum. Pour récapituler à peu près, créez un panneau qui contient le JTextArea et vous donne plus de contrôle sur le comportement de redimensionnement. Voici un extrait du message du forum ci-dessus:

static class MyPanel extends JPanel implements Scrollable 
{ 
    MyPanel(LayoutManager layout) 
    { 
    super(layout); 
    } 

    public Dimension getPreferredScrollableViewportSize() 
    { 
    return getPreferredSize(); 
    } 

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) 
    { 
    return 0; 
    } 

    public boolean getScrollableTracksViewportHeight() 
    { 
    return false; 
    } 

    public boolean getScrollableTracksViewportWidth() 
    { 
    return true; 
    } 

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) 
    { 
    return 0; 
    } 
} 

Ensuite, chaque fois que vous utiliserez le JTextArea, utilisez le panneau contenant la zone de texte:

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); 
this.setLayout(thisLayout); 
{ 
    jLabel1 = new JLabel(); 
    this.add(jLabel1, "cell 0 0"); 
    jLabel1.setText("jLabel1"); 
} 
{ 
    JPanel textAreaPanel = new MyPanel(new MigLayout("wrap", "[grow,fill]", "[]")); 
    jTextArea1 = new JTextArea(); 
    textAreaPanel.add(jTextArea1); 
    this.add(textAreaPanel, "cell 0 1 2 1,grow,wmin 10"); 
    jTextArea1.setText("jTextArea1"); 
    jTextArea1.setLineWrap(false); 
} 
+0

Merci beaucoup Kaleb. J'ai aussi essayé de le mettre dans un scrollpane, qui fonctionne aussi bien. Salutations Marcel –

17

Je viens de découvrir que cela peut simplement être résolue par changer la ligne

this.add(jTextArea1, "cell 0 1 2 1,growx"); 

à

this.add(jTextArea1, "cell 0 1 2 1,growx, wmin 10"); 

et aucun panneau supplémentaire n'est nécessaire. Définir une taille minimale explicite est ce qui fait l'affaire.

Explication: voir la note dans la section sur le rembourrage dans le MiGLayout livre blanc:

http://www.migcalendar.com/miglayout/whitepaper.html

+0

+1 Cela semble résoudre des problèmes avec d'autres composants tenaces, aussi. Dans mon cas mon cadre de navigateur de chrome ne rétrécirait pas jusqu'à l'ajout d'une taille minimum. –

+0

Confirmé, cela fonctionne, et beaucoup plus facile à utiliser que la réponse acceptée. Vous pouvez spécifier '" wmin 0 "' qui, à mon avis, indique clairement qu'il est ajouté pour contourner un problème. +1 pour votre difficulté minimale – Timmos

+0

Veuillez considérer pour marquer cette réponse comme acceptée. Fonctionne comme un charme ici. THX. – FaithReaper

Questions connexes