0

所以这个问题的初始设置是有一个 JDialog,在里面我放置了一个 JPanel 来容纳其余的组件(因为绘制 JDialog 本身显然是一个坏主意)。这个 JPanel 有一个覆盖的 paintComponent(Graphics g) 方法,它只绘制背景并为美观目的添加一个微弱的边框。

现在里面是一系列 JPanel,它们对包含的表单组件进行分类,每个 JPanel 也有一个覆盖的paintComponent(Graphics g),绘制一个半透明的背景。

在每个 JPanel 中,我开始遇到一些问题,大概是透明度问题。我在这些面板中有 JTextFields、JCheckBoxes、JLabels、JSlider 等,当您与其中一个交互(悬停、单击等)时,背景从透明变为不透明,偶尔会出现来自另一个字段的重影图像(看起来有点随机有时)。我正在使用一个名为 Web 的自定义 LAF,但我使用其他内置 LAF 进行了测试,并且发生了同样的事情。

这是Java的故障还是我搞砸了?如果是这样,我该如何修补?如有必要,我可以稍后粘贴代码片段,但我使用了几个自定义类和九个补丁样式的图像拼接,这可能会使代码片段难以理解。提前致谢!

4

1 回答 1

4

如果您正在绘制具有透明背景的组件,那么将组件标记为透明 ( setOpaue(false)) 非常重要,这样重绘管理器就知道它必须绘制它下面的组件。

当您执行自定义绘画时,您首先调用它也非常重要super.paintComponent

这在透明组件的情况下尤其重要,因为这Graphics为绘画准备了上下文。

Graphics是共享资源。在您的窗口中绘制的所有组件都将共享同一个Graphics对象,这意味着如果您不允许paintComponent首先准备它,那么您将看到之前在其上绘制的内容。

于 2013-06-22T21:26:50.033 回答