您需要将窗口设置为不透明,并在Graphics上使用复合.此外,在您的代码中,您只打印一个边框,而不是四个边框,这就是为什么您只看到一个边框被绘制的原因.像这样的东西应该这样做(虽然最好根据插图绘制边框,而不是你的RADIUS常量):
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.io.UnsupportedEncodingException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.AbstractBorder;
import com.sun.awt.AWTUtilities;
public class Main {
private static class ShadowBorder extends AbstractBorder {
private static final int RADIUS = 30;
@Override
public boolean isBorderOpaque() {
return false;
}
@Over