/ / Comment puis-je dimensionner un Java Swing JTextArea - java, swing, gestionnaire de mise en page, jtextarea, preferredsize

Comment dimensionner un Java Swing JTextArea - java, swing, gestionnaire de mise en page, jtextarea, preferredsize

J'essaie de mettre une zone de texte dans une boîte de dialogueen utilisant Java Swing. J'ai un problème de réglage de la taille de ce JTextArea. La largeur de la zone de texte est toujours égale à toute la largeur de la fenêtre et s’étire avec la fenêtre si je la redimensionne.

private void arrangeComponents() {
JTextArea textArea = new JTextArea();
JPanel outerPanel = new JPanel();
outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.PAGE_AXIS));

JScrollPane scrollPane = new JScrollPane(textArea);
outerPanel.add(scrollPane, BorderLayout.CENTER);

Container contentPane = getContentPane();
contentPane.add(outerPanel, BorderLayout.CENTER);
}

Je veux que JTextArea soit aligné horizontalement au centre de la fenêtre et ne change pas sa taille.

Qu'ai-je fait de mal?

Réponses:

7 pour la réponse № 1

Utilisez le JTextArea(int rows, int columns) constructeur qui spécifie les lignes et les colonnes, comme indiqué ici, et ne pas négliger de pack() la clôture Window.


2 pour la réponse № 2
outerPanel.add(scrollPane, BorderLayout.CENTER);

Un BoxLayout ne prend pas de contraintes, donc BorderLayout.CENTER est inutile.

Le problème est qu'un BoxLayout respecte la taille maximale du composant qui, pour un volet de défilement, est définie sur une très grande taille.

Au lieu d'utiliser un BoxLayout, utilisez simplement un panneau avec un FlowLayout.

Exécutez l'exemple ci-dessous pour voir ce que vous faites actuellement. Puis commentez l'instruction setLayout (...) et exécutez à nouveau. Par défaut, le panneau utilise un FlowLayout afin que vous obteniez ce que vous voulez.

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

public class SSCCE extends JPanel
{
public SSCCE()
{
setLayout( new BoxLayout(this, BoxLayout.PAGE_AXIS));

JTextArea textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane(textArea);
//scrollPane.setMaximumSize( scrollPane.getPreferredSize() );

add(scrollPane);
}

private static void createAndShowUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new SSCCE() );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}

Ou si vous voulez vraiment garder le BoxLayout alorslaissez garder l'instruction setLayout (...), puis définissez la taille maximale sur la taille préférée. Beaucoup de gens diront que vous ne devez jamais invoquer directement une méthode "setXXX ()" et que vous devez remplacer la méthode setMaximumSize () du scrollpane pour ne renvoyer que la taille préférée.

Notez que lorsque vous testez ces deux solutions, veillez à rendre la fenêtre plus petite que le panneau de défilement pour voir comment chaque disposition fonctionne différemment.


1 pour la réponse № 3

J'ai trouvé cela à partir d'un site de codage simple. Cet exemple de code peut vous être utile.

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class JTextAreaTest {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("JTextArea Test");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String text = "A JTextArea object represents a multiline area for displaying text. "
+ "You can change the number of lines that can be displayed at a time, "
+ "as well as the number of columns. You can wrap lines and words too. "
+ "You can also put your JTextArea in a JScrollPane to make it scrollable.";
JTextArea textAreal = new JTextArea(text, 5, 10);
textAreal.setPreferredSize(new Dimension(100, 100));
JTextArea textArea2 = new JTextArea(text, 5, 10);
textArea2.setPreferredSize(new Dimension(100, 100));
JScrollPane scrollPane = new JScrollPane(textArea2,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textAreal.setLineWrap(true);
textArea2.setLineWrap(true);
frame.add(textAreal);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
}
}

1 pour la réponse № 4

Il suffit d'appeler cette méthode pour la zone de texte ur: setLineWrap(true);


0 pour la réponse № 5

Si JTextArea est initialisé JTextArea text = new JTextArea(int rows, int columns)

vous appelez juste la méthode text.setLineWrap(true)

alors la taille du texte est fixée.