SWT布局如何根据内容

时间:2016-04-24 17:29:09

标签: java eclipse layout resize swt

我在我的RCP应用程序中有一个资源管理器,我在其中添加了一个带有RowLayout的内部复合,以显示各种类别项。调整资源管理器的宽度时,我希望类别项包装到新行并扩展其父组合的大小。

如果我用默认值初始化我的内部组合,没有任何反应,甚至没有包装。如果我把它设置为抓住垂直空间,它占用了一半的空间,另一半留给树,这是丑陋而不是想要的。如果我设置提示,我确实包装,但其复合的大小永远不会改变,从而隐藏下一行。我尝试添加一个resize事件监听器并调整我的内部组合。这允许我调整它并显示所有行,但它然后掩盖并隐藏树的一部分。我试图为树本身做一个setLocation和setSize来相应地移动/调整它,但是没有用,它不会改变。

如何才能使其发挥作用。我错过了什么是不是有一种简单的方法可以要求使用最低要求高度的布局而不是更多,但如果需要可以进行调整?

感谢您的帮助。

这里是代码:

    innerComposite = new Composite(parent, SWT.NONE);
    innerComposite.addListener(SWT.Resize, listenerComp);
    GridDataFactory.fillDefaults().hint(10, 30).applyTo(innerComposite);
    GridLayoutFactory.fillDefaults().applyTo(innerComposite);

Listener listenerComp = new Listener() {
  public void handleEvent(Event event) {
    Widget widget = event.widget;
    Composite comp = (Composite)widget;
    Composite parent = comp.getParent();
    Point parentSize = parent.getSize();
    Point size = comp.computeSize(parentSize.x, SWT.DEFAULT);
    comp.setSize(size);
  }
}

这是一张图片:

enter image description here

调整大小后(注意到树的第一行被遮盖):

enter image description here

1 个答案:

答案 0 :(得分:0)

当您使用布局时,调用var watson = require('watson-developer-cloud'); var request = require('request'); var fs = require('fs'); var speechToText = watson.speech_to_text({ username: 'SERVICE USERNAME', password: 'SERVICE PASSWORD', version: 'v1', url: 'https://stream.watsonplatform.net/speech-to-text/api' }); var audioFile = 'https://www.dropbox.com/s/l97pe3x996fnbtg/speech.ogg?dl=1'; // create the stream var recognizeStream = speechToText.createRecognizeStream(); // pipe in some audio request(audioFile).pipe(recognizeStream); // and pipe out the transcription recognizeStream.pipe(fs.createWriteStream('transcription.txt')); (或setSize)将会破坏已设置的布局。

相反,您应该在拥有树和setBounds的{​​{1}}上致电layout(true)(甚至layout(true, true)