Java SWT复合变换

Java SWT复合变换,java,swt,composite,Java,Swt,Composite,我既找不到解决方案,也找不到是否有可能在SWT中轻松转换合成 我正在尝试使用CTRL+SCROLL在合成图上实现放大/缩小。到目前为止,我发现在合成中添加了一个PaintListener,如下所示: this.viewingFrame = new Shell(new Display()); this.viewingFrame.setLayout(new GridLayout(2, false)); GridDataFactory.fillDefaults().grab(t

我既找不到解决方案,也找不到是否有可能在SWT中轻松转换合成

我正在尝试使用CTRL+SCROLL在合成图上实现放大/缩小。到目前为止,我发现在合成中添加了一个PaintListener,如下所示:

    this.viewingFrame = new Shell(new Display());
    this.viewingFrame.setLayout(new GridLayout(2, false));
    GridDataFactory.fillDefaults().grab(true, true).applyTo(viewingFrame);

    c1 = new Composite(viewingFrame, SWT.NONE);
    GridLayoutFactory.swtDefaults().applyTo(c1);
    GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(c1);
    c1.addPaintListener(new PaintListener() {

        @Override
        public void paintControl(PaintEvent e) {
            Transform trans = new Transform(e.display);
            e.gc.setAdvanced(true); // After this line a call to e.gc.getAdvance() returns true
            trans.scale(1.5f, 1.5f);
            e.gc.setTransform(trans);
            trans.dispose();
        }
    });
    // Of course there is more code. I have a KTable displaying a 2D map. I also tried adding the PaintListener to the shell, the composite c1 and the KTable. Same result.
然而,这不起作用。在调试时,我可以看到调用了侦听器,但没有明显的效果


我是SWT新手,但我学得快,所以我愿意考虑复杂的解决方案。

简短的答案是:SWT中的比例控制不支持(直接)。

转换
仅适用于在为其创建转换的GC上执行的绘图操作。它不会影响组合中包含的控件

要模拟一定程度的缩放,可以更改内容应缩放的容器的字体大小(即
Shell
Composite
),然后重新布局。除非显式设置字体,否则包含的控件将继承字体大小。在后一种情况下,您还必须更改这些字体的大小

如果希望
Shell
随内容增长/收缩,则必须
pack()
。否则,您可能需要在包含所有实际内容的Shell中放置一个
ScrolledComposite


顺便说一句,如果你真的想画一些东西,请使用
Canvas
小部件而不是
Composite

谢谢你的解释和建议。这并不是我想要的,但我想我可以让它满足我的需要。