标签: repaintmanager

SwingUtilities3.setDelegateRepaintManager 的 Java 9 替换

在尝试移植 Swing 代码以与 Java 模块系统兼容时,我在尝试替换SwingUtilities3.setDelegateRepaintManager.

我有一个组件,当它的任何子级请求重绘时,我需要转换该区域(特别是这试图为org.pbjar.jxlayer.plaf.ext.TransformUI知道这一点的任何人移植代码)。目前,这是通过设置组件的委托重绘管理器并拦截对 的调用来完成的addDirtyRegion

现在使用 Java 9,这样做的方法不再作为公共 api 可用。原始代码提供了一种替代方法,该方法最初用于SwingUtilities3.setDelegateRepaintManager不可用的旧版 Java ,它只是用RepaintManager委托实现替换了全局。如果组件包含在需要转换的实际组件中,它会检查每个调用。然而,该解决方案丢弃了 的所有内部数据RepaintManager并导致在调整框架大小时严重闪烁。

这是当前使用的代码的删节版:

SwingUtilities3.setDelegateRepaintManager(component, new TransformRepaintManger());

...

class TransformRepaintManager extends RepaintManager {

    @Override
    public void addDirtyRegion(JComponent c, int x, int y, int w, int h) {
        if (c.isShowing()) {
            Point point = c.getLocationOnScreen();
            SwingUtilities.convertPointFromScreen(point, c);
            Rectangle transformPortRegion = transform(new Rectangle(x + point.x, y + point.y, w, h), c);
            RepaintManager.currentManager(c)
                .addDirtyRegion(c,
                    transformPortRegion.x, transformPortRegion.y,
                    transformPortRegion.width, transformPortRegion.height);
        } …
Run Code Online (Sandbox Code Playgroud)

java swing java-platform-module-system swingutilities repaintmanager

9
推荐指数
0
解决办法
79
查看次数

如何从RepaintManager生成异常

关于我的问题(可能),我发现了另一种异常类型,我无法从SwingWorker线程中捕获和打印出来.

如何生成RepaintManager异常?

我读这CheckThreadViolationRepaintManager该方法通过Alexander Potochkin,但似乎没有解决我的问题.

java swing exception repaintmanager

6
推荐指数
1
解决办法
1820
查看次数