Objekte die man auf Panel erstellt Koordinaten zu weisen

Moin,
ich würde sehr gerne Objekte einem Panel zu weisen, aber bekomme das nicht hin, einen bestimmten Ort auszuwählen, wo die
einzelnen Objekte erscheinen sollen. Habe es mit Borderlayout versucht, aber dort kann ich ja auch nur North,South,West auswählen und das ist auch nicht so das wahre, ich würde gerne bestimmen wo diese einzelnen Objekte erscheinen, damit die auch einen Sinn ergeben.

  {
    public void actionPerformed(ActionEvent event) 
    {
      JPanel panel = new JPanel();
      panel.setLayout(new BorderLayout());
      panel.add(new Label("Test Label 1: "),BorderLayout.NORTH);
      panel.add(new Label("Diese Schrift soll neben Test Label 1 stehen"));
      panel.add(new Label("Test Label 2"));
      panel.add(new Label("Diese Schrift soll neben Test Label 2 stehen"));
      panel.add(new Label("Test Label 3:"));
      panel.add(new Label("Diese Schrift soll neben Test Label 3 stehen"));
      panel.add(new TextArea("Das ist ein  Text", 11, 35, TextArea.SCROLLBARS_NONE));
      JOptionPane.showMessageDialog(null,panel,"Test",JOptionPane.INFORMATION_MESSAGE);
    }
  }

Die Test Label 1,2,3 sollen unter einander stehen, die dazu gehörigen Labels daneben.
Die Labels sollen außerdem über der Text Area stehen.

Wäre nett, wenn ihr mir da helfen könntet

Das löst man mit LayoutManagern. Das angesprochene BorderLayout ist eins davon.
Eine Einführung dazu findest du hier: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Zwei Dinge vorneweg: Man kann LayoutManager verschachteln und Finger weg vom null-Layout :wink:

Und welches würdest du für mein Vorhaben empfehlen?

Vermutlich ne Kombination aus BorderLayout, FlowLayout und/oder Gridlayout.
Aber schau dir einfach mal die verlinkte Seite an, das sollte alle Fragen klären.

Wahrscheinlich GridLayout und BorderLayout. Im Wiki findest du kleine Beiträge als Einführung: http://wiki.byte-welt.net/wiki/LayoutManager

[quote=Unregistered]Und welches würdest du für mein Vorhaben empfehlen?[/quote]Für mich sieht das nach [JAPI]GroupLayout[/JAPI] aus, oder das gute alte JGoodies/FormLayout wäre angebracht…

bye
TT

Mach alles mit GridLayout, das, mehrere davon und mehrere (J)Panels lassen sich wunderbar verschachteln.

Hier siehst du, dass das gut ausschaut:
http://docs.oracle.com/javase/tutorial/figures/uiswing/layout/GridLayoutDemo.png

Mit dem GridBagLayout bekommst du so ziemlich fast alles hin, was du möchtest. Es sieht zwar anfangs etwas kompliziert aus, aber wenn man sich da mal etwas reingearbeitet hat, ist es ziemlich einfach und mächtig. In einem Raster kannst du deine Komponenten platzieren und ausrichten.

[quote=Camino]Mit dem GridBagLayout bekommst du so ziemlich fast alles hin, was du möchtest.[/quote]Das stimmt.
Trotzdem rate ich davon ab.

Warum?
Die Elemente auf Deiner Oberfläche haben eine gewisse Struktur. Manche gehören in einem Block zusammen, andere sind davon unabhängig. Das GBL verleitet dazu, diese Struktur zu ignorieren und erschwert damit spätere Refactorings, wenn man beispielsweise einen solchen logischen Block von Komponenten in eine eigene Klasse auslagern will.
Es ist immer gut sich so früh wie möglich Gedanken über die Strukturen des Programms zu machen. Nach meiner Erfahrung ist die Aussage: “Das kann ich säter noch machen” in dem meisten Fällen falsch.

bye
TT

Ich habe das mal mit einem GridLayout versucht, es kommt meinem Ziel sehr nahe.
Zur Zeit sieht es so aus:

Mein Ziel sieht aber so aus:

Den Code bis jetzt sieht so aus:

  {
    public void actionPerformed(ActionEvent event) 
    {
  	 JPanel panel = new JPanel( new GridLayout(0,2));
      
      panel.add(new Label("Test Label 1 "));
      panel.add(new Label("Die Schrift soll neben Test Label 1 stehen"));
      panel.add(new Label("Test Label 2"));
      panel.add(new Label("Die Schrift soll neben Test Label 2 stehen"));
      panel.add(new Label("Test Label 3"));
      panel.add(new Label("Die Schrift soll neben Test Label 3 stehen"));
      panel.add(new TextArea("Hier soll ein Text drinne stehen.", 11, 35, TextArea.SCROLLBARS_NONE));      
      
      JOptionPane.showMessageDialog(null,panel,"Test",JOptionPane.INFORMATION_MESSAGE);
    }
  }```

Wie gesagt, man kann die LayoutManager auch mischen. Ich würde es in etwa so machen (in der Annahme, dass die TextArea mitwachsen soll):

public class Main
{

	public static void main(String[] args)
	{
		JFrame frame = new JFrame("Demo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container contentPane = frame.getContentPane();
		contentPane.setLayout(new BorderLayout());
		
		// create the labels
		JPanel headPanel = new JPanel();
		headPanel.setLayout(new BoxLayout(headPanel, BoxLayout.Y_AXIS));
		headPanel.add(createLabelValueRow("Test Label 1", "Die Schrift soll neben Test Label 1 stehen"));
		headPanel.add(createLabelValueRow("Test Label 2", "Die Schrift soll neben Test Label 2 stehen"));
		headPanel.add(createLabelValueRow("Test Label 3", "Die Schrift soll neben Test Label 3 stehen"));

		// create the text area
		JTextArea textArea = new JTextArea();
		
		// create the button
		JPanel buttonPanel = new JPanel();
		buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
		buttonPanel.add(new JButton("Ok"));
		
		// add components to the content pane
		contentPane.add(headPanel, BorderLayout.NORTH);
		contentPane.add(textArea, BorderLayout.CENTER);
		contentPane.add(buttonPanel, BorderLayout.SOUTH);
		
		frame.pack();
		frame.setVisible(true);
	}
	
	private static JPanel createLabelValueRow(String label, String value)
	{
		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		JLabel l = new JLabel(label);
		panel.add(l);
		
		JLabel v = new JLabel(value);
		v.setFont(v.getFont().deriveFont(Font.PLAIN));
		panel.add(v);
		
		return panel;
	}
}

Statt der Kombination BoxLayout und FlowLayout kann man auch das GridBagLayout verwenden.

Dankeschön, funktioniert super! :slight_smile: