Panel wird nicht gefüllt

HeinerPyt

Erfahrenes Mitglied
Hi,

ich habe zwei Panels geschaffen. Wenn ich das Programm laufen lasse, dann wird das unter (gelbe) Panel mit den Labels1-4 und den Textfeldern 1- 4 angezeigt. Das obere (schwarze) Panel wird nur als schwarzer Block angezeigt. Woran kann das liegen?

Code:
package Swingfenster;

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


public class SubWin extends JFrame
{

	
	public SubWin( int x, int y ) 
		  { 
		    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
		    setSize( x, y ); 
		    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
		    setLocation( (d.width  - getSize().width ) / 2, 
		                 (d.height - getSize().height) / 2 ); 
		  } 
		 
		  public static void main( String[] args ) 
		  { 

		    JFrame win = new SubWin( 700, 700 );
			Panel panel1 = new Panel();
			panel1.setSize(200,300);
			panel1.setBackground(Color.BLACK);
		    panel1.setLayout(new GridLayout(4,2));
		    
			JLabel L1 = new JLabel("Label 1");
		    JLabel L2 = new JLabel("Label 2");
		    JLabel L3 = new JLabel("Label 3");
		    JLabel L4 = new JLabel("Label 4");
		    L1.setFont(new Font("Serif",Font.BOLD,30));
		    L1.setForeground(Color.MAGENTA);
		    L2.setFont(new Font("Serif",Font.BOLD,30));
		    L2.setForeground(Color.RED);
		    L3.setFont(new Font("Serif",Font.BOLD,30));
		    L3.setForeground(Color.MAGENTA);
		    L4.setFont(new Font("Serif",Font.BOLD,30));
		    L4.setForeground(Color.RED);
		    JTextField T1 = new JTextField("Text 1",20);
		    JTextField T2 = new JTextField("Text 2",20);
		    JTextField T3 = new JTextField("Text 3",20);
		    JTextField T4 = new JTextField("Text 4",20);
		    panel1.add(L1);
		    panel1.add(T1);
		    panel1.add(L2);
		    panel1.add(T2);
		    panel1.add(L3);
		    panel1.add(T3);
		    panel1.add(L4);
		    panel1.add(T4);
		    
		    Panel panel2 = new Panel();
			panel2.setBackground(Color.YELLOW);
		    panel2.setLayout(new GridLayout(4,2));
		    panel2.add(L1);
		    panel2.add(T1);
		    panel2.add(L2);
		    panel2.add(T2);
		    panel2.add(L3);
		    panel2.add(T3);
		    panel2.add(L4);
		    panel2.add(T4);
		    
		    win.setLayout(new GridLayout(2,1));
		    win.add(panel1);
		    win.add(panel2);
//		    win.pack();
		    win.setVisible( true ); 
		  } 


}

Danke
Heiner
 

Matze

Weltenwanderer
Hallo,

Ganz einfach: Du hängst die Komponenten zwar an das schwarze Panel an, aber danach an das Gelbe. Die Komponenten können aber nur an ein Panel gleichzeitig angahängt sein. Deshalb werden sie vom Schwarzen wieder entfernt, wenn du sie dem Gelben gibst.
 

Leroux

Erfahrenes Mitglied
Java:
import java.awt.*; 
import javax.swing.*; 


public class HalloWelt extends JFrame
{

	
	public HalloWelt( int x, int y ) 
		  { 
		    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
		    setSize( x, y ); 
		    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
		    setLocation( (d.width  - getSize().width ) / 2, 
		                 (d.height - getSize().height) / 2 ); 
		  } 
		 
		  public static void main( String[] args ) 
		  { 

		    JFrame win = new HalloWelt( 700, 700 );
			Panel panel1 = new Panel();
			panel1.setSize(200,300);
			panel1.setBackground(Color.BLACK);
		    panel1.setLayout(new GridLayout(4,2));
		    
			JLabel L1 = new JLabel("Label 1");
		    JLabel L2 = new JLabel("Label 2");
		    JLabel L3 = new JLabel("Label 3");
		    JLabel L4 = new JLabel("Label 4");
		    L1.setFont(new Font("Serif",Font.BOLD,30));
		    L1.setForeground(Color.MAGENTA);
		    L2.setFont(new Font("Serif",Font.BOLD,30));
		    L2.setForeground(Color.RED);
		    L3.setFont(new Font("Serif",Font.BOLD,30));
		    L3.setForeground(Color.MAGENTA);
		    L4.setFont(new Font("Serif",Font.BOLD,30));
		    L4.setForeground(Color.RED);
		    JTextField T1 = new JTextField("Text 1",20);
		    JTextField T2 = new JTextField("Text 2",20);
		    JTextField T3 = new JTextField("Text 3",20);
		    JTextField T4 = new JTextField("Text 4",20);
		    panel1.add(L1);
		    panel1.add(T1);
		    panel1.add(L2);
		    panel1.add(T2);
		    panel1.add(L3);
		    panel1.add(T3);
		    panel1.add(L4);
		    panel1.add(T4);
		    
		    Panel panel2 = new Panel();
			panel2.setBackground(Color.YELLOW);
		    panel2.setLayout(new GridLayout(4,2));
		    panel2.add(L1.getParent());
		    panel2.add(T1.getParent());
		    panel2.add(L2.getParent());
		    panel2.add(T2.getParent());
		    panel2.add(L3.getParent());
		    panel2.add(T3.getParent());
		    panel2.add(L4.getParent());
		    panel2.add(T4.getParent());
		    
		    win.setLayout(new GridLayout(2,1));
		    win.add(panel1);
		    win.add(panel2);
//		    win.pack();
		    win.setVisible( true ); 
		  } 


}

Hier das klappt
 

HeinerPyt

Erfahrenes Mitglied
@Leroux:

Tut mir leid, das klappt nicht. Jetzt habe ich die Labels und Felder wieder im Sschwarzen aber nicht im gelben Panel.
 

Vincentius

Erfahrenes Mitglied
Hallo Heiner,

Matze hat ja schon die Ursache des Problems richtig erkannt, da gibt's nichts mehr hinzuzufügen...

Ich wollte nur darauf hinweisen, dass man nach Möglichkeit die AWT und Swing-Komponente nicht miteinander mischen sollte: wenn schon Swing, dann alles! Die Ursachen sind z.B. hier gut erklärt: Warum nicht AWT und Swing mischen?.

Grüße
Vincent