2017-01-17 74 views
0

我有一個Eclipse插件應用程序(十年前的代碼,沒有文檔等)丟在我的腿上,同時向它添加新功能時,我注意到當面板是調整大小後,文本框會在拖動分隔符時連續更改大小。 This is what it should look likeEclipse SWT文本框更改大小

After resizing

正如你可以在第二圖片中看到,該文本框是一種隨機大小。 SWT中是否存在可以防止這種情況發生的設置?

以下是我如何創建其中一個文本框。其他基本上是這樣的克隆:

Font font = parent.getFont(); 
    setLayout(new FillLayout()); 

    SashForm sashForm = new SashForm(this, SWT.VERTICAL); 

    FormToolkit toolkit = new FormToolkit(getParent().getDisplay()); 
    Section section = toolkit.createSection(sashForm, 
      Section.DESCRIPTION | ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED); 
    section.setLayoutData(new GridData(GridData.FILL_BOTH)); 
    section.setLayout(new GridLayout()); 
    section.setText("Section Title"); 
    Composite controlComposite = toolkit.createComposite(section); 
    GridLayout controlLayout = new GridLayout(); 
    controlLayout.numColumns = 2; 
    controlLayout.verticalSpacing = 20; 
    controlComposite.setLayout(controlLayout); 
    section.setClient(controlComposite); 

    Font bold = ResourceManager.getBoldFont(font); 

    Label textLabel = toolkit.createLabel(controlComposite, "Title:", SWT.BOLD); 
    GridData gd = new GridData(); 
    gd.horizontalSpan = 1; 
    textLabel.setLayoutData(gd); 
    textLabel.setFont(bold); 

    textBox = new ExtendedText(controlComposite, SWT.BORDER | SWT.SINGLE, false); 
    gd = new GridData(GridData.FILL_HORIZONTAL); 
    gd.horizontalSpan = 1; 
    gd.verticalSpan = 2; 
    textBox.setLayoutData(gd); 

ExtendedText類是StyledText的擴展。它的重要的位是這樣的:

GridData gd_bg = new GridData(GridData.FILL_BOTH); 
    setLayoutData(gd_bg); 

    final GridLayout gridLayout = new GridLayout(); 
    gridLayout.verticalSpacing = 0; 
    gridLayout.marginWidth = 0; 
    gridLayout.marginHeight = 0; 
    gridLayout.horizontalSpacing = 0; 
    gridLayout.numColumns = 1; 
    gridLayout.makeColumnsEqualWidth = true; 

    sashForm.setWeights(new int[] { 1, 1 }); 
+2

您需要發佈您用來創建'Text'對象的代碼,如果有一個處理調整大小,你需要的代碼也發佈這一點。 – Baz

+0

好點。我會更新一下 –

+1

你真的要給我們看一個[mcve],因爲這樣的代碼是不夠的。例如,最後一個'gridLayout'不會做任何事情,除非它被設置爲某個控件的佈局。您似乎有一個ViewPart包含一個表單,並從外觀看它是否爲Section。這裏有很多互動,不能從你所展示的內容來確定。 –

回答

1

好了,在更深一點點挖後,我得到了它的工作如預期。

首先,使用

Composite controlComposite = new Composite(section, SWT.NONE) 
controlComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); 
controlComposite.setBackground(section.getBackground()); 
GridLayout controlLayout = new GridLayout(2, true); 
controlLayout.marginHeight = 20; 
controlLayout.marginWidth = 0; 
controlLayout.verticalSpacing = 10; 
controlLayout.horizontalSpacing = 0; 
controlComposite.setLayout(controlLayout); 
section.setClient(controlComposite); 

一旦我做到了,事情開始趨於穩定,現在創建controlComposite和controlLayout對象。我也最終調整了權重:

sashForm.setWeights(new int[] { 2, 3 }); 

這並不完美,但它現在會做。

感謝@格雷格-449和@Baz採取看看