父面板没有正确重新绘制

时间:2015-10-18 06:38:33

标签: java swing repaint invalidation

我有一个面板,其中包含已添加到其中的自定义组件。它正确绘制,除非正在拖动组件(有自己的鼠标滑块),它开始绘制奇怪。

有趣的是,如果我稍微调整父面板的大小,它现在将按预期绘制。我知道父小组正在通过

进行重新绘制
"engines": {
"node": "0.10.18",
"npm": "1.3.8"
},

和面板内的打印声明

 super.paintComponent(g);

方法。我尝试重新验证组件被拖动时(因为组件重新设置其边界)它变得无效。我仍然没有成功,并想知道是否有人可以提供帮助。

是否有某些地方我没有正确重新绘制可能导致此行为的地方?

另外作为附录,我在面板及其组件上都有一个鼠标监听器,是否有一种方法可以在单击一个组件时面板鼠标监听器也响应(除了从组件返回到父类)

以下是我遇到问题的一个工作示例

paintComponent(Graphics g):

1 个答案:

答案 0 :(得分:2)

父面板实际上并未完全自动重新绘制。调用roomNumber,但如果您检查裁剪,例如:

#include<string>
using std::string;
class Strarr {
private:
    string *items;
    int size;
public:
    Strarr() {
        items = new string[0];
        size = 0;
    }
    ~Strarr() {
        delete[] items;
    }
};
int main() {
    Strarr test;
    test.~Strarr();
}

你会看到只有较小组件下方的区域被绘制。 (组件不是不透明的,因此父组件需要在其下方绘制区域)。您需要为父面板明确调用paintComponent()

System.out.println(g.getClipBounds());

(或者使用指定区域的repaint()变体,如果父组件的绘制成本高,并且可以优化部分绘制。)