【问题标题】:How to make a jPanel semi transparent?如何使 jPanel 半透明?
【发布时间】:2025-11-27 00:30:02
【问题描述】:

我想添加一个半透明的 jPanel。但是放置在 jPanel 内的其他组件(例如按钮和标签)应该以 100% 的不透明度显示。我正在使用 netbeans 来设计 GUI。通常我在调色板中拖放摆动组件来设计 GUI(我不编码)。我在属性窗口中看不到任何属性来实现这一点。请帮我。由于我对java很陌生,请给我一个详细的答案。提前致谢。

【问题讨论】:

标签: java swing user-interface jpanel


【解决方案1】:

你可以使用 JPanel.setBackground(Color bg); 使面板半透明。重要的是颜色的属性。 您可以构造一个带有 alpha 值的颜色来设置颜色的透明程度。

panel.setBackground(new Color(213, 134, 145, 123));

最后一个参数是实际的alpha值,你可以调整它来看看效果。

代码如下:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class PanelTest {
    public static void main(String[] args) {

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                PanelTest test = new PanelTest();
                test.createUI();
            }
        };
        SwingUtilities.invokeLater(runnable);
    }

    public void createUI(){
        JFrame frame = new JFrame("Panel Test");

        JPanel panel = new JPanel();

        panel.setBackground(new Color(213, 134, 145, 123));
        JButton button = new JButton("I am a button");

        JLabel label = new JLabel("I am a label");
        label.setFont(new Font("Arial", Font.BOLD, 15));

        JTextField textField = new JTextField();

        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(button);
        panel.add(Box.createVerticalStrut(20));
        panel.add(label);
        panel.add(Box.createVerticalStrut(20));
        panel.add(textField);

        panel.setBorder(BorderFactory.createEmptyBorder(30, 30, 30, 30));

        BottomPanel buttomPanel = new BottomPanel();
        buttomPanel.add(panel);
        frame.add(buttomPanel,BorderLayout.CENTER);

        frame.setResizable(false);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    @SuppressWarnings("serial")
    class BottomPanel extends JPanel{
        @Override
        protected void paintComponent(Graphics g) {
            for (int y = 0; y < 200; y = y + 20) {
                g.drawString("I am the string on the bottom", 5, y);
            }
        }
    }
}

下面是效果,希望对你有帮助。

【讨论】:

    【解决方案2】:

    您可以像往常一样简单地使用拖放创建 jPanel,然后更改面板的颜色并使其透明或半透明,您可以使用以下代码:

    panel.setBackground(new Color(0.0f, 0.0f, 0.0f, 0.5f));
    

    你可以通过改变Color构造函数的前三个参数来改变颜色,代表RGB,你可以通过改变第四个参数来改变透明度,也就是颜色的alpha值。

    【讨论】:

      最近更新 更多