我既不能找到解决方案,也不能在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的新手,但我学得很快,所以我愿意考虑复杂的解决方案。
答案 0 :(得分:1)
简短的回答是:不支持(直接)SWT中的缩放控件。 Transform
仅适用于在创建它的GC上完成的绘图操作。它不会影响Composite中包含的控件。
要模拟缩放到cretain度,您可以更改其内容应缩放的容器的字体大小(即Shell
或Composite
),然后重新布局。除非显式设置了字体,否则字体大小由包含的控件继承。在后一种情况下,您还必须更改这些字体的大小。
如果您希望Shell
增加/缩小其内容,则必须pack()
。否则,您可能需要在Shell中放置一个包含所有实际内容的ScrolledComposite
。
Canvas
小部件而不是Composite
。