web-dev-qa-db-fra.com

Qu'est-ce que setBounds et comment l'utiliser?

Je ne trouve rien sur setBounds, ni à quoi il sert ni quelle est sa fonction. Quelqu'un pourrait-il m'éclaircir là-dessus? Merci beaucoup!

26
JeremyF

Vous pouvez utiliser setBounds(x, y, width, height) pour spécifier la position et la taille d'un composant d'interface graphique utilisateur si vous définissez layout sur null. Ensuite (x, y) est la coordonnée du coin supérieur gauche de ce composant.

28
tianz

setBounds est utilisé pour définir le rectangle de délimitation d'un composant. Cela inclut sa position et sa taille.

Le est utilisé à plusieurs endroits dans le cadre.

  • Il est utilisé par le gestionnaire de disposition pour définir la position et la taille d'un composant dans son conteneur parent.
  • Il est utilisé par le sous-système Paint pour définir les limites de découpage lors du dessin du composant.

Pour la plupart, vous ne devriez jamais l'appeler. Au lieu de cela, vous devez utiliser les gestionnaires de disposition appropriés et les laisser déterminer le meilleur moyen de fournir des informations à cette méthode.

9
MadProgrammer

Ceci est une méthode de Java.awt.Component classe. Il est utilisé pour définir la position et la taille d'un composant:

setBounds

public void setBounds(int x,
                  int y,
                  int width,
                  int height) 

Déplace et redimensionne ce composant. Le nouvel emplacement du coin supérieur gauche est spécifié par x et y, et la nouvelle taille est spécifiée par la largeur et la hauteur. Paramètres:

  • x - la nouvelle coordonnée x de ce composant
  • y - la nouvelle coordonnée y de cette composante
  • width - la nouvelle largeur de ce composant
  • hauteur - la nouvelle hauteur de ce composant

x et y comme ci-dessus correspondent au coin supérieur gauche dans la plupart (tous?) des cas.

C'est un raccourci pour setLocation et setSize.

Cela ne fonctionne généralement que si le modèle/le gestionnaire de modèle est inexistant, c'est-à-dire null.

8
Andrey Akhmetov

Il y a une réponse de @hexafraction, il avait spécifié que x et y étaient en haut à droite, ce qui est faux, ceux-ci sont en haut à gauche.

J'ai également fourni la source s'il vous plaît vérifier.

public void setBounds(int x,
             int y,
             int width,
             int height)

Déplace et redimensionne ce composant. Le nouvel emplacement du coin supérieur gauche est spécifié par x et y, et la nouvelle taille est spécifiée par la largeur et la hauteur. Cette méthode modifie les informations relatives à la présentation et, par conséquent, invalide la hiérarchie des composants.

Paramètres:

x - la nouvelle coordonnée x de ce composant

y - la nouvelle coordonnée y de cette composante

width - la nouvelle largeur de ce composant

hauteur - la nouvelle hauteur de ce composant

source: - setBounds

2

En fait, un composant Swing a plusieurs dimensions, comme:

  • taille actuelle - setSize () et setBounds () la définissent
  • taille minimale - setMinimumSize () définit ceci
  • taille préférée - setPerferredSize () définit ceci
  • taille maximale - setMaximumSize () définit ceci.

SetBounds est un raccourci pour définir la taille actuelle et l'emplacement du widget si vous n'utilisez aucun gestionnaire de présentation.

Si vous utilisez un gestionnaire de disposition, il incombe à celui-ci de disposer vos composants en tenant compte de la taille préférée que vous avez définie et en veillant à ce que le comonent ne soit jamais plus petit que sa taille minimum ou plus grand que sa taille maximum.

Dans ce cas, le layoutManager appellera setSize (ou setBounds) et vous ne pouvez pas vraiment contrôler la position ou la dimension du composant.

L'intérêt d'utiliser un gestionnaire de disposition est de disposer d'une manière indépendante de la plate-forme et de la taille de la fenêtre de présenter vos composants automatiquement, vous ne devez donc pas appeler setSize à partir de votre code.

(Commentaire personnel: il existe des gestionnaires de mise en page buggy, je les hais tous personnellement et je me suis roulé, ce qui offre la flexibilité de MigLayout sans la courbe d'apprentissage.)

1
Gee Bee

voici un court paragraphe de cet article Comment créer des cadres (fenêtres principales) - Le Java Tutorials - Oracle qui explique ce que fait la méthode setBounds en plus d'autres méthodes similaires :

La méthode de conditionnement dimensionne le cadre de sorte que tout son contenu soit égal ou supérieur à sa taille préférée. Une alternative à pack consiste à établir explicitement une taille de trame en appelant setSize ou setBounds (qui définit également l'emplacement de la trame) . En général, utiliser pack est préférable à appeler setSize, car ce dernier laisse le gestionnaire de disposition de trame responsable de la taille de la trame, et les gestionnaires de disposition sont très aptes à s’adapter aux dépendances de la plate-forme et à d’autres facteurs affectant la taille des composants.

les paramètres de setBounds sont (int x, int y, int width, int height) x et y définissent la position/emplacement et width et height définissent la taille/dimension du cadre.

0
DrSimplisist

La manière dont Java Swing UIs fonctionne est que pour chaque JPanel il y a toujours un LayoutManager qui décide où placer exactement vos composants. Chaque gestionnaire de disposition fonctionne différemment, donc si vous utilisez par exemple BorderLayout, setBounds () n'est pas utilisé par LayoutManager, mais le placement des composants est décidé par Est, Ouest, Sud, Nord et Centre.

Pour NullLayoutManager (si vous avez utilisé new JPanel(null)), chaque composant doit toutefois avoir une coordonnée x et y. Stupid Sidenote: si votre interface utilisateur était en trois dimensions, il y aurait aussi une coordonnée z.

Donc, avec public void Component.setBounds(int x, int y, int width, int height), vous spécifiez où votre composant est placé et combien de pixels il est large et large.

Voici un exemple:

import Java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class JTableInNullLayout
{
  public static void main(String[] argv) throws Exception {

      JPanel panel = new JPanel(null);

      JLabel helloLabel = new JLabel("Hello world!");
      helloLabel.setBounds( 10, 50, 60, 20 ); // x, y, width, height
      panel.add(helloLabel);

      JFrame frame = new JFrame();
      frame.add(panel);
      frame.setPreferredSize( new Dimension(200,200));
      frame.pack();
      frame.setVisible(true);
  }
}
0
Axel Podehl