2012-08-18 2 views
6

Donc, j'ai JTextArea sur un JPanel (BoxLayout). J'ai également un remplisseur de boîte qui remplit le reste du JPanel. J'ai besoin de mon JTextArea pour commencer avec single-line-height (je peux gérer cela), et étendre et réduire quand cela est nécessaire.JTextArea word wrap redimensionnant

Le retour à la ligne automatique est activé, je l'ai juste besoin pour ajuster sa hauteur quand une nouvelle ligne est ajoutée/enlevée.

J'ai essayé avec documentListener et getLineCount(), mais il ne reconnaît pas newwrap-newlines. Je voudrais éviter de jouer avec les polices si c'est possible.

Et, PAS DE PANNEAUX DE SCROLL. Il est essentiel que JTextArea soit affiché à tout moment.

Répondre

13

JTextArea a un effet secondaire assez particulier, dans de bonnes conditions, il peut se développer de son propre chef. J'ai trébuché dessus par hasard quand j'essayais de mettre en place un simple éditeur de texte à deux lignes (longueur limitée par ligne, avec un maximum de deux lignes) ...

Fondamentalement, étant donné le bon gestionnaire de disposition, ce composant peut se développer de son propre gré - il fait réellement sens, mais m'a pris par surprise ...

I'm so smallLook at me grow

maintenant, en plus, vous pouvez utiliser un ComponentListener pour surveiller lorsque le composant change de taille, si c'est ce qui vous intéresse ...

public class TestTextArea extends JFrame { 

    public TestTextArea() { 

     setLayout(new GridBagLayout()); 

     JTextArea textArea = new JTextArea(); 
     textArea.setColumns(10); 
     textArea.setRows(1); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 

     add(textArea); 

     setSize(200, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 

     textArea.addComponentListener(new ComponentAdapter() { 

      @Override 
      public void componentResized(ComponentEvent ce) { 

       System.out.println("I've changed size"); 

      } 

     }); 

    } 


    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new TestTextArea(); 
    } 

}