# Transparentes Panel ohne Rahmen



## 0001001 (27. Okt 2009)

Hi,

ich würde gerne ein einfaches transparentes Panel haben auf dem ich ein paar JComponents platzieren kann.
Das Ganze soll ungefähr aussehen wie:






Gibts eine solche Komponente bereits vorgefertigt?


----------



## Verjigorm (27. Okt 2009)

Du meinst das schwarze Ding in der Mitte?

Wie wärs mit einem JWindow?
Oder einem undecorated, modalem JDialog
Oder einer selbstgezeichneten Glasspane


----------



## javimka (27. Okt 2009)

Verstehe noch nicht ganz, wie du dir dieses Panel vorstellst. Soll es überall transparent sein (z.B. 50%) oder sollen einfach nur deine Komponenten sichtbar und runherum Transparenz sein (=setOpage(false)) ?. Oder willst du auch noch gleich diesen Blur Effekt haben?


----------



## KrokoDiehl (27. Okt 2009)

Ich habe hier zwei Links für dich, die dir dabei vielleicht weiterhelfen:
1) How to Create Translucent and Shaped Windows
2) How to Control Window Decorations


----------



## Nader (29. Okt 2009)

0001001 hat gesagt.:


> Hi,
> 
> ..Gibts eine solche Komponente bereits vorgefertigt?



nein!

du kannst zwar ein JFrame, JWindow, JDialog um x% transpaent machen aber damit werden alle dessen Inhalte auch transparent. In deinem Beispiel werden auch die Bilder im schwarzen Fenster und die Texte ebenfalls transparent.


----------



## André Uhres (30. Okt 2009)

Meinst du sowas:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class TransparentPanel extends JPanel implements ActionListener {
    private final JFrame owner;
    TransparentPanel(final JFrame owner) {
        this.owner = owner;
        setOpaque(false);
        setBackground(new Color(100, 100, 100, 200));
        JButton btClose = new JButton("Close");
        add(btClose);
        setSize(200, 150);
        JLayeredPane layeredPane = owner.getLayeredPane();
        layeredPane.add(this, JLayeredPane.POPUP_LAYER);
        setVisible(false);
        btClose.addActionListener(this);
        owner.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(final ComponentEvent e) {
                setVisible(isVisible());
            }
        });
    }
    @Override
    protected void paintComponent(final Graphics g) {
        g.setColor(getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
    }
    public void actionPerformed(final ActionEvent e) {
        setVisible(false);
    }
    @Override
    public void setVisible(final boolean visible) {
        super.setVisible(visible);
        if (isVisible()) {
            int wO = owner.getWidth();
            int hO = owner.getHeight() - 30;
            setLocation((wO - getWidth()) / 2, (hO - getHeight()) / 2);
        }
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
            public void run() {
                JFrame frame = new JFrame("Transparent Demo");
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setSize(400, 300);
                frame.setLocationRelativeTo(null);
                JButton btShow = new JButton("Show transparent panel");
                final TransparentPanel transparentPanel = new TransparentPanel(frame);
                btShow.addActionListener(new ActionListener() {

                    public void actionPerformed(final ActionEvent evt) {
                        transparentPanel.setVisible(true);
                    }
                });
                frame.add(btShow, BorderLayout.PAGE_START);
                frame.add(new JColorChooser(), BorderLayout.CENTER);
                frame.setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
```


----------

