透明面板,没有任何文物

jor*_*dan 0 java swing alpha-transparency paintcomponent

我在用JComponentJava 重写对象和绘画时知识非常有限.我要做的是创建一个函数,我可以调用它来设置透明度,避免在面板内单击按钮时出现伪像.基本上我会JPanel在另一个面板上使用它.喜欢,

class panel1 extends JPanel(){
public panel1(){
    this.add(new panel2())
    //call the setPanelTransparency(this);
}

class panel2 extends JPanel(){
    this.setPreferredSize(new Dimension(500,500));
    this.setBorder(BorderFactory.createLineBorder(2,Color.RED);
}
Run Code Online (Sandbox Code Playgroud)

我该如何纠正这种方法?当我试图将它作为panel1课程中的方法包含时,我会收到错误.

 public void setPanelTransparency(JPanel myPanel){

    protected void paintComponent ( Graphics g )
    {
        g.setColor ( getBackground () );
        g.fillRect ( 0, 0, getWidth (), getHeight () );
        super.paintComponent ( g );
    }

    });
    myPanel.setOpaque(false);
    myPanel.setBackground(new Color(49,43,31,60));
}
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.我想知道使Panels透明的最简单方法,没有任何工件风险.我需要一种可以调用的方法.此外,我尝试过,UIManager.put()但似乎没有适当的应用没有任何工件.

我很欣赏将透明度应用于项目的最简单的解决方案,因此我可以专注于创建表格.

cam*_*ckr 6

您不能使用setPanelTransparency()等方法来覆盖方法.

该面板需要自己成为一个类来覆盖paintComponent(...)方法:

//public void setPanelTransparency(JPanel myPanel){
public class TransparentPanel extend JPanel 
{
    TransparentPanel()
    {
        setOpaque( false );
    }

    @Override
    protectect void paintComponent(...)
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后你只需使用面板:

TransparentPanel panel = new TransparentPanel();
panel.setBackground(...);
panel.add( new JTestField(10) );
frame.add( panel );
Run Code Online (Sandbox Code Playgroud)

有关此方法的更多信息和不同的解决方案,请参阅透明度背景.