Saltar al contenido

¿Cómo establecer un fondo transparente de JPanel?

Te recomendamos que revises esta solución en un entorno controlado antes de enviarlo a producción, saludos.

Solución:

Vocación setOpaque(false) en la parte superior JPanel Deberia trabajar.

Por su comentario, parece que la pintura de Swing puede estar rota en alguna parte:

Primero, probablemente quería anular paintComponent() en vez de paint() en el componente que tengas paint() anulado en.

Segundo: cuando anulas paintComponent()primero querrás llamar super.paintComponent() primero en hacer todas las cosas predeterminadas de pintura Swing (de las cuales honrar setOpaque() es uno).

Ejemplo –

import java.awt.Color;
import java.awt.Graphics;

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


public class TwoPanels 
    public static void main(String[] args) 

        JPanel p = new JPanel();
        // setting layout to null so we can make panels overlap
        p.setLayout(null);

        CirclePanel topPanel = new CirclePanel();
        // drawing should be in blue
        topPanel.setForeground(Color.blue);
        // background should be black, except it's not opaque, so 
        // background will not be drawn
        topPanel.setBackground(Color.black);
        // set opaque to false - background not drawn
        topPanel.setOpaque(false);
        topPanel.setBounds(50, 50, 100, 100);
        // add topPanel - components paint in order added, 
        // so add topPanel first
        p.add(topPanel);

        CirclePanel bottomPanel = new CirclePanel();
        // drawing in green
        bottomPanel.setForeground(Color.green);
        // background in cyan
        bottomPanel.setBackground(Color.cyan);
        // and it will show this time, because opaque is true
        bottomPanel.setOpaque(true);
        bottomPanel.setBounds(30, 30, 100, 100);
        // add bottomPanel last...
        p.add(bottomPanel);

        // frame handling code...
        JFrame f = new JFrame("Two Panels");
        f.setContentPane(p);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 300);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    

    // Panel with a circle drawn on it.
    private static class CirclePanel extends JPanel 

        // This is Swing, so override paint*Component* - not paint
        protected void paintComponent(Graphics g) 
            // call super.paintComponent to get default Swing 
            // painting behavior (opaque honored, etc.)
            super.paintComponent(g);
            int x = 10;
            int y = 10;
            int width = getWidth() - 20;
            int height = getHeight() - 20;
            g.drawArc(x, y, width, height, 0, 360);
        
    

Alternativamente, considere el panel de vidriodiscutido en el artículo Cómo usar los paneles raíz. Puede dibujar su contenido de “Características” en el panel de vidrio paintComponent() método.

Anexo: Trabajando con GlassPaneDemo, agregué una imagen:

//Set up the content pane, where the "main GUI" lives.
frame.add(changeButton, BorderLayout.SOUTH);
frame.add(new JLabel(new ImageIcon("img.jpg")), BorderLayout.CENTER);

y alteró el panel de vidrio paintComponent() método:

protected void paintComponent(Graphics g) 
    if (point != null) 
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setComposite(AlphaComposite.getInstance(
            AlphaComposite.SRC_OVER, 0.3f));
        g2d.setColor(Color.yellow);
        g2d.fillOval(point.x, point.y, 120, 60);
    

ingrese la descripción de la imagen aquí

Como se indica aquí, los componentes de Swing deben respetar la propiedad opaca; en esta variación, la ImageIcon llena por completo el BorderLayout.CENTER del diseño predeterminado del marco.

En mi caso particular fue más fácil hacer esto:

 panel.setOpaque(true);
 panel.setBackground(new Color(0,0,0,0,)): // any color with alpha 0 (in this case the color is black

Aquí puedes ver las reseñas y valoraciones de los lectores

Acuérdate de que tienes la capacidad de añadir un diagnóstico verdadero si encontraste tu contratiempo a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *