import javax.swing.JFrame;
import javax.swing.JSlider;public class TransparentFrame extends JFrame {public TransparentFrame() {setTitle('Transparent Frame');setSize(400,400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JSlider slider = new JSlider(JSlider.HORIZONTAL);add(slider);setVisible(true);}public static void main(String[] args) {new TransparentFrame();}
}
其输出将是:
现在将更改侦听器添加到滑块,以便我们可以对其进行监视。
slider.addChangeListener(new ChangeListener() {@Overridepublic void stateChanged(ChangeEvent e) {}
});
现在,我们将在此方法中编写透明性逻辑,但是在执行此操作之前,首先让我们看看如何使JFrame透明。
为了使JFrame透明,java具有一个内置的实用程序类AWTUtilities 。 通过使用此类提供的方法,我们可以使JFrame透明。 以下是该代码:
AWTUtilities.setWindowOpacity(window, floatOpacity);
参数:
窗口–您的框架/窗口对象。
floatOpactity-在0到1之间。1表示不透明,0表示完全透明。
因此,现在我们知道我们必须将此逻辑添加到滑块更改事件,并将滑块值指定为floatOpacity值。 因此对于以下状态更改stateChanged()方法:
@Override
public void stateChanged(ChangeEvent e) {JSlider slider = (JSlider) e.getSource();if(!slider.getValueIsAdjusting()){AWTUtilities.setWindowOpacity(TransparentFrame.this, slider.getValue());}
}
认为已经完成。 不,我们仍然必须确保不透明度值不超过其0.0f到1.0f的限制。 因此,我们必须将滑块限制为这些值。 由于滑块不支持点值,因此我们将以10的倍数取值,然后将它们除以100得到所需的值。 为此,我们将更改JSlider声明和stateChanged,如下所示:
JSlider slider = new JSlider(JSlider.HORIZONTAL, 10, 100, 100);
在stateChanged方法中更改以下行:
AWTUtilities.setWindowOpacity(TransparentFrame.this, slider.getValue()/100f);
因此,现在当我们运行该程序时,我们会看到一个框架,其中带有一个设置为结束的滑块。 当我们更改滑块时,框架会相应地更改其透明度。
输出:
注意:
要在Eclipse中使用AWTUtilities类,您需要更改首选项设置,否则访问受限类可能会出错。 要更改设置,请执行以下操作:
- 右键单击您的项目。 选择属性。
- 选择Java编译器并将其展开。
- 选择错误/警告。
- 启用项目特定的设置。
- 在“不建议使用和限制的API”中,您将找到“禁止引用(访问规则)”。将其更改为“警告”或“忽略”
参考: harryjoy博客上的JCG合作伙伴 Harsh Raval 使JFrame透明 。
翻译自: https://www.javacodegeeks.com/2012/09/make-jframe-transparent.html