2016-10-09 1 views
0

Quelle est la meilleure façon de redimensionner JTextArea vertical? Je pense que je devrais mettre JTextArea dans JScrollPane (et je peux faire un simple panneau avec scrollbar). Mais je veux faire défiler JTextArea par la souris verticale. J'ai essayé d'utiliser la classe selon ce tut .: https://tips4java.wordpress.com/2009/09/13/resizing-components/, mais il est capable de redimensionner le composant de tous les côtés.Redimensionner JTextArea seulement vertical

Je veux quelque chose comme ici:

http://www.w3schools.com/cssref/playit.asp?filename=playcss_resize&preval=vertical

ou quelque chose comme textarea que vous utilisez pour poster réponse au sujet ici.

EDIT:

Mon morceau de code avec classe ComponentResizer (de https://tips4java.wordpress.com/2009/09/13/resizing-components/)

package textsamplerdemo; 

import javax.swing.*; 
import java.awt.*; 

public class TextSamplerDemo extends JPanel { 

    public TextSamplerDemo() { 
     setLayout(new BorderLayout()); 
     JTextArea textArea = new JTextArea(10, 20); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 
     JScrollPane scrollPane = new JScrollPane(textArea); 
     ComponentResizer componentResizer = new ComponentResizer(); 
     componentResizer.registerComponent(scrollPane); 
     add(scrollPane, BorderLayout.PAGE_START); 
    } 

    /** 
    * Create the GUI and show it. For thread safety, this method should be 
    * invoked from the event dispatch thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("TextSamplerDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //Add content to the window. 
     frame.add(new TextSamplerDemo()); 
     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event dispatching thread: 
     //creating and showing this application's GUI. 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       //Turn off metal's use of bold fonts 
       UIManager.put("swing.boldMetal", Boolean.FALSE); 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+2

Utilisez une contrainte de disposition et d'agencement appropriée. 'LINE_START' ou' LINE_END' d'un 'BorderLayout' le ferait. Assurez-vous de donner à la zone de texte un nombre défini de colonnes et de lignes pour suggérer une taille à la mise en page. –

+0

Vous voulez dire quelque chose comme ça? 'setLayout (nouveau BorderLayout()); JTextArea textArea = new JTextArea (10,20); ComponentResizer componentResizer = new ComponentResizer(); componentResizer.registerComponent (textArea); add (textArea, BorderLayout.PAGE_START); ' – Jan444444

+1

@AndrewThompson a spécifié' LINE_START' ou 'LINE_END'; essayez-le pour voir pourquoi; comme le code dans les commentaires est difficile à lire, veuillez éditer votre question pour inclure un [mcve] qui montre votre approche révisée; utilisez '@' pour appeler les participants par leur nom. – trashgod

Répondre

1

, mais il est capable de redimensionner le composant avec tous les côtés.

La propriété ComponentResizer prend en charge une propriété maximum size. Donc, vous pouvez faire quelque chose comme:

JTextArea textArea = new JTextArea(5, 20); 
ScrollPane scrollPane = new JScrollPane(textArea); 
Dimension d = scrollPane.getPreferredSize(); 
d.height = Toolkit.getDefaultToolkit().getScreenSize().height; 
ComponentResizer cr = new ComponentResizer(); 
cr.setMaximumSize(d)); 
cr.registerComponent(scrollPane);