web-dev-qa-db-fra.com

Placer un JLabel à une coordonnée x, y spécifique sur un JPanel

J'essaie de placer une série de JLabels à des coordonnées X et Y spécifiques sur un JPanel (et de définir sa hauteur et sa largeur également). Quoi que je fasse, chaque étiquette se place immédiatement à droite de l'étiquette précédente et a exactement la même taille que toutes les autres. 

En ce moment, mon Jpanel est dans une disposition en grille. J'ai essayé Absolute Layout (résultats d'exception d'argument illégal), Free Design (aucune étiquette n'apparaît), Flow Layout (tout se trouve juste au centre), et quelques autres.

Pas sûr de ce que je dois faire pour que cela fonctionne. Quelqu'un peut-il aider? Merci!

JLabel lbl1 = new JLabel("label 1");
JLabel lbl2 = new JLabel("label 2");
JLabel lbl3 = new JLabel("label 3");
JLabel lbl4 = new JLabel("label 4");
JLabel lbl5 = new JLabel("label 5");

myPanel.add(lbl1);
myPanel.add(lbl2);
myPanel.add(lbl3);
myPanel.add(lbl4);
myPanel.add(lbl5);

lbl1.setLocation(27, 20);
lbl2.setLocation(123, 20);
lbl3.setLocation(273, 20);
lbl4.setLocation(363, 20);
lbl5.setLocation(453, 20);

lbl1.setSize(86, 14);
lbl2.setSize(140, 14);
lbl3.setSize(80, 14);
lbl4.setSize(80, 14);
lbl5.setSize(130, 14);
9
Alex

Vous devez définir la disposition de votre conteneur sur null:

myPanel.setLayout(null);

Cependant, il est également conseillé de jeter un coup d’œil sur Matisse Layout Manager, qui s’appelle maintenant GroupLayout Le principal problème du positionnement absolu est ce qui se passe lorsque la fenêtre change de taille. 

16
gersonZaragocin
  1. Définissez le gestionnaire de disposition du conteneur sur null en appelant setLayout(null).

  2. Appelez la méthode setbounds de la classe Component pour chacun des enfants du conteneur.

  3. Appelez la méthode repaint de la classe Component.

Remarque:

La création de conteneurs avec des conteneurs parfaitement positionnés peut poser des problèmes si la fenêtre contenant le conteneur est redimensionnée.

Référez-vous à ce lien: http://docs.Oracle.com/javase/tutorial/uiswing/layout/none.html

4
Vinesh

Les gestionnaires de disposition permettent de déterminer automatiquement la disposition des composants dans un conteneur. Si vous souhaitez placer des composants à des emplacements de coordonnées spécifiques, vous ne devez absolument pas utiliser de gestionnaire de disposition.

myPanel = new JPanel(null);

ou

myPanel.setLayout(null);
3
Kevin Reid

Mon conseil est d’utiliser un IDE comme NetBeans avec son éditeur graphique. Pour inspecter le code et parce qu'il y a plusieurs façons:

La définition du gestionnaire de disposition ou le positionnement absolu avec myPanel.setLayout (null) a plusieurs influences.

En général, en supposant que vous fassiez vos appels dans le constructeur d'un JFrame, vous pouvez appeler pack() pour démarrer la mise en page.

Ensuite, chaque gestionnaire de disposition utilise sa propre implémentation de add(Component) ou add(Component, Constraint). BorderLayout est utilisé avec add (label, BorderLayout.CENTER), etc.

2
Joop Eggen
    // Best solution!!

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

public class Main {

  public static void main(String args[]) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = (JPanel) frame.getContentPane();
    panel.setLayout(null);

    JLabel label = new JLabel("aaa");
    panel.add(label);
    Dimension size = label.getPreferredSize();
    label.setBounds(100, 100, size.width, size.height);

    frame.setSize(300, 200);
    frame.setVisible(true);

  }
}
0
isra israel