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
 
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.
 
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
 
@Leroux:

Tut mir leid, das klappt nicht. Jetzt habe ich die Labels und Felder wieder im Sschwarzen aber nicht im gelben Panel.
 
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
 
Zurück