基本上,您需要制作一系列的图层。
Jframe
ShadowPanel
and content…
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import javax.swing.Jframe;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;public class ShadowWindow {
public static void main(String[] args) { new ShadowWindow();}public ShadowWindow() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } Jframe frame = new Jframe("Testing"); frame.setUndecorated(true); frame.setBackground(new Color(0, 0, 0, 0)); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.setContentPane(new ShadowPane()); JPanel panel = new JPanel(new GridBagLayout()); panel.add(new JLabel("Look ma, no hands")); frame.add(panel); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } });}public class ShadowPane extends JPanel { public ShadowPane() { setLayout(new BorderLayout()); setOpaque(false); setBackground(Color.BLACK); setBorder(new EmptyBorder(0, 0, 10, 10)); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.setComposite(AlphaComposite.SrcOver.derive(0.5f)); g2d.fillRect(10, 10, getWidth(), getHeight()); g2d.dispose(); }}}



