SWT复合变换

时间:2014-11-03 07:57:45

标签: java swt composite

我既不能找到解决方案,也不能在SWT中轻松转换Composite。

我正在尝试使用CTRL + SCROLL在Composite上实现放大/缩小。到目前为止我发现的是将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的新手,但我学得很快,所以我愿意考虑复杂的解决方案。

1 个答案:

答案 0 :(得分:1)

简短的回答是:不支持(直接)SWT中的缩放控件。 Transform仅适用于在创建它的GC上完成的绘图操作。它不会影响Composite中包含的控件。

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

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

如果你真的想要画一些东西,BTW会使用Canvas小部件而不是Composite