【问题标题】:JFrame loses transparency trait once components added一旦添加了组件,JFrame 就会失去透明度特征
【发布时间】:2017-07-01 23:20:43
【问题描述】:

我想制作一个具有透明框架和非透明子级的覆盖窗口。我在制作透明窗口时成功了,甚至在添加测试子项以查看它是否有效时也成功了。但是,一旦我用我的paintComponent 替换了那个测试代码……我就会得到一个白色的背景。有谁知道为什么?

package blahh;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;;

public class LoadingFrame {

    public static void main(String[] args) {
        LoadingFrame Class = new LoadingFrame();
        Class.frameChar();


    }

    public void frameChar(){
        JFrame frame = new JFrame();
        B b = new B();


        frame.setUndecorated(true);
        frame.setBackground(new Color(0, 0, 0, 0));
        frame.setAlwaysOnTop(true);    
        frame.setPreferredSize(new Dimension(500, 500));
        frame.getContentPane().setLayout(new java.awt.BorderLayout()); 
        frame.setLocationRelativeTo(null);        
        frame.setVisible(true);
        //frame.getContentPane().add(new JLabel("test code");
        frame.add(b);
        frame.pack();
    }

 public class B extends JPanel{
     public void paintComponent(Graphics g){
            super.paintComponent(g);
            g.drawRect(0, 0, 100, 100);


        }

 }   
}

【问题讨论】:

  • 你的面板默认是不透明的,构建时考虑调用setOpaque(false)
  • 啊,你明白了!你是个天才。感谢您的帮助!

标签: java jframe transparent paintcomponent


【解决方案1】:

JPanel默认是不透明的,结合BorderLayout会覆盖整个框架,让它看起来不透明。你需要打电话给setOpaque(false)让它看透

    JFrame frame = new JFrame();
    B b = new B();
    b.setOpaque(false);


    frame.setUndecorated(true);
    frame.setBackground(new Color(0, 0, 0, 0));
    frame.setAlwaysOnTop(true);    
    // I'd prefer to override getPreferredSize of B
    frame.setPreferredSize(new Dimension(500, 500));
    frame.setLocationRelativeTo(null);        
    frame.add(b);
    frame.pack();
    frame.setVisible(true);

ps- 你也应该在可能的情况下最后调用setVisible,它只会减少你的组件不随机出现的可能性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多