# Wie kann man 2 JPanel aufeinander transparent legen?



## maracash (26. Feb 2011)

Hallo proggis,

ich habe 2 unterschiedliche JPanel, die ich in einem JFrame platzieren will.

Das 1. JPanel nimmt die ganze Fläche von JFrame und stellt die grafischen Abläufe dar.

Im 2. JPanel sollten mehrere JButton dargestellt sein. Sie müssen aber über das 1. JPanel transparent gezeichnet werden, so dass man unter diesen Buttons die Grafik vom 1. JPanel zu sehen ist.

Ich habe versucht mit setContentAreaFilled(false) zu lösen. Bei Buttons hat es kein gutes Ergebnis gebracht. JPanel hat diese Funktion leider nicht.

Hat jemand eine Idee?


----------



## Simon_Flagg (26. Feb 2011)

vlt. hilft das: How to Use Root Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

lg


----------



## L-ectron-X (26. Feb 2011)

Grafische Abläufe könntest du auch in der paintComponent()-Methode zeichnen lassen, so wie ein Hintergrundbild.
Die Buttons fügst du dann wie gewohnt diesem Panel hinzu.


----------



## maracash (26. Feb 2011)

Simon_Flagg hat gesagt.:


> vlt. hilft das: How to Use Root Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
> 
> lg



Gute Idee mit GlasPane. Aus irgendeinem Grund funktioniert aber nicht. ???


```
package javaapplication16;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Main {


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel blauesHintergrund = new JPanel();
        blauesHintergrund.setBackground(Color.BLUE);

        MyGlassPane glassPane = new MyGlassPane();

        frame.add(blauesHintergrund);
        frame.add(glassPane);

        frame.setGlassPane(glassPane); /*********/
        
        frame.setSize(200, 200);
        frame.setVisible(true);
    }

}
```


```
package javaapplication16;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;

class MyGlassPane extends JComponent {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillOval(100, 100, 20, 20);        
    }

}
```

Es soll, meiner Meinung nach der blaue Hintergrund zu sehen sein. Ich sehe weder roten Kreis, noch blauen Hintergrund. Wenn ich die Zeile 

frame.setGlassPane(glassPane); /*********/

auskommentiere, dann sehe ich den roten Kreis, aber nicht den Hintergrund.


----------



## maracash (26. Feb 2011)

oh, entlich habe ich es hingekriegt 

die Lösung:


```
package javaapplication16;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Main {


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel blauesHintergrund = new JPanel();
        blauesHintergrund.setBackground(Color.BLUE);

        MyGlassPane glassPane = new MyGlassPane();

        frame.add(blauesHintergrund);
        
[B][I]        [COLOR="Red"]frame.setGlassPane(glassPane);
        glassPane.setVisible(true);[/COLOR][/I][/B]

        frame.setSize(200, 200);
        frame.setVisible(true);
    }

}
```


----------

