疯狂程序员,
frame.setBackground(new Color(0, 0, 0, 0));
如果你不使用也是没用的:
frame.setOpacity(1.0f);
将默认关闭操作设置为 EXIT_ON_CLSE 是不好的,应用程序应该在两个进程结束时自然关闭,因此 DISPOSE_ON_CLOSE 是正确的方法,保留另一个来“修复”错误。
frame.setContentPane(new ShadowPanel());
如果您也(及之后)使用,则无用:
frame.add(panel);
ShadowPanel 的构造函数应该以:
super(new GridBagLayout());
代替:
setLayout(new GridBagLayout());
此外,使用 GridBagLayout 仅添加单个组件有点不成比例,不是吗?那么 GridLayout(1, 1) 甚至是懒惰的 BorderLayout 呢?
在每次调用首选尺寸时返回一个新的 Dimension(其中许多是由机器完成的,在很多操作期间,如重新粉刷等)非常昂贵。您应该返回在构造函数或类中定义的变量。
为什么要覆盖 getPreferredSize(),而不是 getBackground(),也不是 isOpaque()?
GraphicsD 应该放在 try 块中,以便在 finally 块中处理它。