2016-11-28 12 views
0

У меня есть таблица в . Часть область должна отображаться при открытии моего приложения RCP, однако на данный момент я не знаю, как сделать таблицу автоматического изменения размера в соответствии с Часть снаружи. Вы можете видеть на моем экране ниже, что является уродливым.Как сделать таблицу автоматического изменения размера в соответствии с внешней частью области в приложении RCP с помощью SWT?

enter image description here

И следующий мой исходный код, я бы очень признателен, что если кто-нибудь, кто может показать мне, как сделать таблицу автоматического изменения размера.

import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.inject.Inject; 

import org.eclipse.e4.ui.di.Focus; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.FormAttachment; 
import org.eclipse.swt.layout.FormData; 
import org.eclipse.swt.layout.FormLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableColumn; 

import com.hpi.hpdm.console.utils.Device; 
import com.hpi.hpdm.console.utils.DeviceRetriever; 

public class DeviceListPart { 
    private static Table table; 

    @PostConstruct 
    public void createControls(Composite parent) { 

     parent.setLayout(new FormLayout()); 
     table = new Table(parent, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION); 

     table.setLinesVisible(true); 
     table.setHeaderVisible(true); 

     FormData fd_table = new FormData(); 
     fd_table.bottom = new FormAttachment(0, 465); 
     fd_table.right = new FormAttachment(0, 620); 
     fd_table.top = new FormAttachment(0, 44); 
     fd_table.left = new FormAttachment(0, 10); 
     table.setLayoutData(fd_table); 


     Button btnRetrieve = new Button(parent, SWT.NONE); 

     FormData fd_btnRetrieve = new FormData(); 
     fd_btnRetrieve.bottom = new FormAttachment(table, -4); 
     fd_btnRetrieve.left = new FormAttachment(table, 0, SWT.LEFT); 
     btnRetrieve.setLayoutData(fd_btnRetrieve); 
     btnRetrieve.setText("Retrieve"); 

     Button btnAdd = new Button(parent, SWT.NONE); 

     FormData fd_btnAdd = new FormData(); 
     fd_btnAdd.top = new FormAttachment(btnRetrieve, 0, SWT.TOP); 
     fd_btnAdd.left = new FormAttachment(btnRetrieve, 6); 
     btnAdd.setLayoutData(fd_btnAdd); 
     btnAdd.setText("Add"); 

     Button btnDelete = new Button(parent, SWT.NONE); 
     FormData fd_btnDelete = new FormData(); 
     fd_btnDelete.top = new FormAttachment(btnRetrieve, 0, SWT.TOP); 
     fd_btnDelete.left = new FormAttachment(btnAdd, 6); 
     btnDelete.setLayoutData(fd_btnDelete); 
     btnDelete.setText("Delete"); 

     String[] titles = { "Device Name", "Description"}; 
     for (int i = 0; i < titles.length; i++) { 
      TableColumn column = new TableColumn(table, SWT.NONE); 
      column.setText(titles[i]); 
      table.getColumn(i).pack(); 
     } 


     for (int i=0; i<titles.length; i++) { 
      table.getColumn (i).pack(); 
     } 



    } 

    @Focus 
    public void onFocus() { 
     table.setFocus(); 
    } 
} 

ответ

0

Просто установите правый и нижние вложения для таблицы, чтобы быть на 100 процентов ширины/высоты с небольшими отрицательным смещением для любой границы вы хотите:

fd_table.bottom = new FormAttachment(100, -10); 
fd_table.right = new FormAttachment(100, -10); 

Примечания: Это не хорошая идея изменить макет родителя Composite передан методу @PostConstruct. Создайте свой собственный Composite внутри родительского композита.

+0

Спасибо за ваше предложение. Оно работает. Не могли бы вы показать мне правильный способ создания моего собственного «Composite» без нарушения эффекта GUI, который я хочу? Я попробовал 'Composite ownComp = новый Composite (родительский, SWT.NONE); ownComp.setLayout (новый FormLayout()); ', это не то, что я хочу, хотя. – kenshinji

+0

Почему это не то, что вы хотите? Не забудьте изменить все остальные ссылки на 'parent' как' ownComp'. –