Java 未装饰的JFrame阴影

Java 未装饰的JFrame阴影,java,swing,jframe,shadow,Java,Swing,Jframe,Shadow,如何将阴影添加到未装饰的jframe 从我在网上发现的情况来看,您可能可以将jframe添加到另一个黑色半透明窗口,以提供阴影效果。 或者以某种方式将类似的内容应用于JFrame: Border loweredBorder = new EtchedBorder(EtchedBorder.LOWERED); setBorder(loweredBorder); 无论是哪种方式,我只想知道最好的方法,或者是一种完全不同的方式,获得相同的效果,就像从另一个类而不是jframe扩展一样。

如何将阴影添加到未装饰的jframe

从我在网上发现的情况来看,您可能可以将jframe添加到另一个黑色半透明窗口,以提供阴影效果。 或者以某种方式将类似的内容应用于JFrame:

    Border loweredBorder = new EtchedBorder(EtchedBorder.LOWERED);
    setBorder(loweredBorder);
无论是哪种方式,我只想知道最好的方法,或者是一种完全不同的方式,获得相同的效果,就像从另一个类而不是jframe扩展一样。
我是Java新手,所以我可能走错了方向,所以任何建议都很感激

基本上,您需要制作一系列层

  • JFrame
  • ShadowPanel
  • 和内容

MadProgammer

frame.setBackground(new Color(0, 0, 0, 0));
如果您不同时使用以下命令,则该命令无效:

frame.setOpacity(1.0f);
将默认关闭操作设置为在CLSE上退出是错误的,应用程序应在两个进程结束时自然关闭,因此在CLSE上处置是正确的方法,保留另一个以“修复”错误

如果同时使用(和之后使用),则无效:

ShadowPanel的构造函数应以以下内容开始:

super(new GridBagLayout());
而不是:

setLayout(new GridBagLayout());
另外,使用GridBagLayout只添加单个组件有点不成比例,不是吗?那么GridLayout(1,1)或者甚至是懒惰的BorderLayout呢

在每次调用时返回一个新的尺寸,首选尺寸(其中许多尺寸是由机器在大量操作期间完成的,如重新喷漆等)非常昂贵。您应该返回构造函数或类中定义的变量

为什么要覆盖getPreferredSize(),而不是getBackground()或isOpaque()


GraphicsD应该放在try块中,然后在finally块中进行处理。

从技术上讲,您不能向任何其他容器添加框架,但想法是正确的……甚至连JInternalFrame都没有?
JInternalFrame
本身就是一个容器,而不像
JFrame
(或任何扩展
JWindow
frame.add(panel);
super(new GridBagLayout());
setLayout(new GridBagLayout());