/ / GUI JTextArea & JScrollPane & positionnement - java, swing, layout-manager

GUI JTextArea & JScrollPane & positionnement - java, swing, layout-manager

Je souhaite ajouter une fenêtre à partir de la position x, y JTextArea avec des rouleaux. Le problème est que lorsque je visualise du code, il remplit la fenêtre 500x500 et je ne veux remplir que 200x200 de plein en x, y pos.

Qu'est-ce que je fais mal? Voici mon code:

public static void main(String args[])
{
JFrame window = new JFrame();
window.setSize(500, 500);
window.setResizable(false);

JTextArea ta = new JTextArea("Default message");
ta.setEditable(true);

JScrollPane scroll = new JScrollPane(ta);
scroll.setBounds(10,10,200,200);
window.add(scroll);

window.setVisible(true);
}

Réponses:

3 pour la réponse № 1

Zone de texte capitonnée

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

public class PaddedTextArea {

public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
// the GUI as seen by the user (without frame)
JPanel gui = new JPanel(new BorderLayout());
// adjust as needed
gui.setBorder(new EmptyBorder(20,10,20,10));

// better way to size a text area is using columns/rows
// in the constructor
JTextArea ta = new JTextArea(3,40);
JScrollPane sp = new JScrollPane(ta);
gui.add(sp);

JFrame f = new JFrame("Padded Text Area");
f.add(gui);
// Ensures JVM closes after frame(s) closed and
// all non-daemon threads are finished
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// See https://stackoverflow.com/a/7143398/418556 for demo.
f.setLocationByPlatform(true);

// ensures the frame is the minimum size it needs to be
// in order display the components within it
f.pack();
// should be done last, to avoid flickering, moving,
// resizing artifacts.
f.setVisible(true);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}

Plus généralement: Les interfaces graphiques Java peuvent devoir fonctionner sur plusieurs plates-formes, sur différentes résolutions d'écran et en utilisant différents PLAF. En tant que tels, ils ne sont pas propices au placement exact des composants. Pour organiser les composants d’une interface graphique robuste, utilisez plutôt des gestionnaires de disposition, ou des combinaisons de ceux-ci1, avec un rembourrage et des bordures pour espace blanc2.


4 pour la réponse № 2

N’utilisez pas setBounds () pour définir la taille d’un composant. Swing utilise des gestionnaires de modèle pour dimensionner un composant.

Par défaut, un cadre JFrame utilise un BorderLayout et vous ajoutez le composant au CENTRE afin que le composant occupe tout l'espace disponible.

Au lieu de faire quelque chose comme:

JTextArea text Area = new JTextArea(5, 40);
JScrollPane scrollPane = new JScrollPane( textArea );
frame.add(scrollPane, BorderLayout.NORTH);
frame.pack();
frame.setVisible();

Lorsque vous affichez le cadre, la zone de texteoccuper tout l’espace, mais si vous redimensionnez le cadre plus grand, la zone de texte ne sera affichée que dans le NORD et il y aura un espace vide dans le CENTRE.