放置一个透明的JPanel另一个JPanel的顶部不工作(placing a transparent

2019-08-04 21:58发布

我试图把一个JPanel上的另一个JPanel中包含一个JTextArea和一个按钮的顶部,我想上apnel是透明的。 我已让上游面板的setOpaque(假)试了一下。 但它不工作。 谁能帮我通过这个获得? 提前致谢!

public class JpanelTest extends JPanel
{
    public JpanelTest()
    {
    super();
    onInit();
}
private void onInit()
{
    setLayout(new BorderLayout());

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JTextArea(100,100),BorderLayout.CENTER);
    panel.add(new JButton("submit"),BorderLayout.SOUTH);

    JPanel glass = new JPanel();
    glass.setOpaque(false);

    add(panel,BorderLayout.CENTER);
    add(glass,BorderLayout.CENTER);
    setVisible(true);
}

public static void main(String args[])
{
    new JpanelTest();
}
}

Answer 1:

事实上,它会告诉你之所以要板层叠而上是有用的。

与您的代码开始,并改变了很多,我得到它的工作,但你希望它也许不会那么做......

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

public class Test extends JFrame
{
  public Test()
  {
    super();

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 200);

    onInit();

    setVisible(true);
  }
  private void onInit()
  {
    JLayeredPane lp = getLayeredPane();

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JTextArea(), BorderLayout.CENTER);
    panel.add(new JButton("Submit"), BorderLayout.SOUTH);
    panel.setSize(300, 150); // Size is needed here, as there is no layout in lp

    JPanel glass = new JPanel();
    glass.setOpaque(false); // Set to true to see it
    glass.setBackground(Color.GREEN);
    glass.setSize(300, 150);
    glass.setLocation(10, 10);

    lp.add(panel, Integer.valueOf(1));
    lp.add(glass, Integer.valueOf(2));
  }

  public static void main(String args[])
  {
    // Schedule a job for the event-dispatching thread:
    // creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        new Test();
      }
    });
  }
}

如果完全透明,很好,很喜欢它是不是在这里! 当不透明的,它只是介绍一些GUI的,但并不妨碍鼠标点击,例如。



Answer 2:

检查出使用本教程的Swing根窗格 。

当您希望能够赶上事件或画在已经包含一个或多个组件面积的玻璃面板是有用的。 例如,可以通过使玻璃板截距的事件停用对于多组分区域鼠标事件。 或者你也可以显示在使用玻璃嵌板多个组件的图像。



Answer 3:

1)有几个方面,有没有问题,把JPanel的覆盖全JFrames/JPanel area或仅部分Rectangle / Dimension返回JFrames/JPanel

  • 使用JLayer(Java7)基于JXLayer (Java6)

  • 使用GlassPane

  • 使用JViewport

  • 使用OverlayLayout

  • 使用transucent JDialog / JWindow

2)一切,如果你想防止依赖mouse和按键eventstop layerbottom ,或不(以避免redispatch的事件from - to反之亦然)



文章来源: placing a transparent JPanel on top of another JPanel not working