it-swarm.com.de

Platzieren eines JLabels an einer bestimmten XY-Koordinate in einem JPanel

Ich versuche, eine Reihe von JLabels an bestimmten X- und Y-Koordinaten auf einem JPanel zu platzieren (und auch seine Höhe und Breite festzulegen). Egal, was ich mache, jedes Etikett wird unmittelbar rechts vom vorherigen Etikett aufgespult und hat die gleiche Größe wie alle anderen. 

Im Moment befindet sich mein Jpanel in einem Grid-Layout. Ich habe absolutes Layout (unzulässige Argumentausnahmeergebnisse), freies Design (keine Beschriftungen werden angezeigt), Flusslayout (alles wird nur zur Mitte gedrückt) und ein paar andere ausprobiert.

Ich weiß nicht, was ich tun muss, damit das funktioniert. Kann jemand helfen? Vielen Dank!

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

Sie müssen das Layout Ihres Containers auf null setzen:

myPanel.setLayout(null);

Es ist jedoch ein guter Rat, sich auch den Matisse Layout Manager anzusehen, ich nehme an, er heißt jetzt GroupLayout. Das Hauptproblem bei der absoluten Positionierung ist, was passiert, wenn das Fenster seine Größe ändert. 

16
gersonZaragocin
  1. Setzen Sie den Layout-Manager des Containers auf null, indem Sie setLayout(null) aufrufen.

  2. Rufen Sie die setbounds-Methode der Component-Klasse für jedes untergeordnete Element des Containers auf.

  3. Rufen Sie die Repaint-Methode der Component-Klasse auf.

Hinweis:

Das Erstellen von Containern mit absolut positionierten Containern kann zu Problemen führen, wenn die Größe des Fensters mit dem Container geändert wird.

Siehe folgenden Link: http://docs.Oracle.com/javase/tutorial/uiswing/layout/none.html

4
Vinesh

Mit Layout-Managern wird das Layout von Komponenten in einem Container automatisch bestimmt. Wenn Sie Komponenten an bestimmten Koordinatenpositionen platzieren möchten, sollten Sie überhaupt keinen Layout-Manager verwenden.

myPanel = new JPanel(null);

oder

myPanel.setLayout(null);
3
Kevin Reid

Mein Rat ist die Verwendung eines IDE wie NetBeans mit seinem GUI-Editor. So überprüfen Sie den Code und weil es viele Möglichkeiten gibt:

Das Festlegen des Layout-Managers oder die absolute Positionierung eines myPanel.setLayout (null) hat mehrere Einflüsse.

Wenn Sie Ihre Aufrufe im Konstruktor eines JFrames ausführen, können Sie im Allgemeinen pack() aufrufen, um das Layout zu starten.

Jeder Layout-Manager verwendet dann seine eigene Implementierung von add(Component) oder add(Component, Constraint). Die Verwendung von BorderLayout erfolgt mit add (Label, BorderLayout.CENTER) und so weiter.

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