Problem mit der Darstellung von JPanels

tecnique

Grünschnabel
Hallo,

Ich habe ein Problem mit der Darstellung von JPanels. Da die Anwendung in welcher ich das
Problem bekommen habe recht komplex ist, habe ich das Wesentliche mal in ein Testprojekt
geschrieben.
Hier nun erstmal der Code. Die Fehlerbeschreibung kommt dann danach.

Klasse PanelTestMain
Code:
package panelTest;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PanelTestMain {
	
	static JPanel pMain, pLeft;
	
	public static void main(String[] args){
		JFrame f = new JFrame("Test");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(600,400);
		f.setLayout(new BorderLayout());
		
		pMain = new JPanel();
		pMain.setBackground(Color.RED);
		pMain.setLayout(new BorderLayout());
		f.getContentPane().add(pMain, BorderLayout.CENTER);
		
		pLeft = new LeftPanel();
		pMain.add(pLeft, BorderLayout.WEST);
		
		f.setVisible(true);
	}
	
}

Klasse LeftPanel

Code:
package panelTest;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class LeftPanel extends JPanel {

	static JPanel leftMiddle, pStationList;
	
	public LeftPanel(){
		this.setOpaque(false);
		this.setPreferredSize(new Dimension(250,25));
		this.setLayout(new BorderLayout());
		
		JLabel lLeftTop = new JLabel("Top");
		this.add(lLeftTop, BorderLayout.NORTH);
		
		JLabel lLeftBottom = new JLabel("Bottom");
		this.add(lLeftBottom, BorderLayout.SOUTH);
		
		leftMiddle = new LeftMiddlePanel();
		this.setPreferredSize(new Dimension(250,10));
		this.add(leftMiddle, BorderLayout.CENTER);
	}
	
}

Klasse LeftMiddlePanel

Code:
package panelTest;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class LeftMiddlePanel extends JPanel {

	static JPanel pLeftMenuContent;
	
	public LeftMiddlePanel(){
		this.setLayout(new BorderLayout());
		pLeftMenuContent = new LeftMenuContent();
		this.add(pLeftMenuContent, BorderLayout.CENTER);
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponents(g);
		Graphics2D g2 = (Graphics2D) g;
		int width=this.getWidth();
        int height=this.getHeight();
        GradientPaint gp1 = new GradientPaint(width, 0, new Color(100,100,100), width,
                height, new Color(200,200,200), false);
        g2.setPaint(gp1);
        g2.fillRect(0,0,width,height);
	}
	
}

Klasse LeftMenuContent

Code:
package panelTest;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class LeftMenuContent extends JPanel {

	public LeftMenuContent(){
		this.setLayout(new BorderLayout());
		this.setPreferredSize(new Dimension(100,100));
		//this.setOpaque(false);
		JLabel testLabel = new JLabel("test");
		this.add(testLabel, BorderLayout.NORTH);
	}
	
}

So und nun zu dem Problem.
So wie oben abgebildet funktioniert noch alles. Es wird ein Frame erzeugt. Das Frame
enthällt ein JPanel (Farbe rot), welches das Frame ganz ausfüllt.
In diesem Panel befindet sich links ein weiteres Panel. Dieses enthällt wiederum ein
Panel (LeftMiddlePanel), welches einen Farbverlauf im Hintergrund hat.
Dieser ist aber nicht sichtbar, weil LeftMenuContent nicht auf Durchsichtig steht.
Wenn man in LeftMenuContent den Kommentar entfernt um den Farbverlauf sichtbar
zu machen gehen die Probleme los. (Fällt sofort auf, einfach mal probieren)

Wenn man in LeftPanel die zwei JLabels (lLeftTop, lLeftBottom) entfernt, ist alles wieder
in Ordnung.

Daraus werde ich einfach nicht schlau.
Würde mich freuen, wenn mir Jemand sagen kann, woran das liegen könnte.

Danke schonmal für Eure Bemühungen.

Gruss Toby
 
Problem gelöst,

In der Klasse LeftMiddlePanel in der Paint Methode einfach die erste Zeile rausnehmen.
Das "super.paintComponents(g);" muss weg und dann ist die Welt in Ordnung.
 

Neue Beiträge

Zurück