Transparentes Panel ohne Rahmen

Status
Nicht offen für weitere Antworten.

0001001

Bekanntes Mitglied
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:
fade-panel-full.png


Gibts eine solche Komponente bereits vorgefertigt?
 
Du meinst das schwarze Ding in der Mitte?

Wie wärs mit einem JWindow?
Oder einem undecorated, modalem JDialog
Oder einer selbstgezeichneten Glasspane
 
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?
 
Meinst du sowas:
Java:
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);
    }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben