2012-02-10 2 views
1

저는 SWT 초보자이며, 원하는대로 보이기 위해 UI를 둘러싼 문제를 겪고 있습니다. SWT를 조각에서 함께 자갈길 다음 코드를 살펴 보자 :SWT : veritcal separator가 너무 큽니다. 수평이 너무 짧다; 테이블이 너무 좁습니다.

실행
Display.setAppName("App Name"); 

    Display display = new Display(); 

    Shell shell = new Shell(display); 
    GridLayout shellLayout = new GridLayout(); 
    shellLayout.numColumns = 1; 
    shell.setLayout(shellLayout); 

    Group group = new Group(shell, SWT.DEFAULT); 
    RowLayout groupLayout = new RowLayout(); 
    group.setLayout(groupLayout); 

    for (int i = 0; i < 3; i++) 
     new Button(group, SWT.PUSH).setText("ABC" + i); 

    new Label(group, SWT.SEPARATOR | SWT.VERTICAL); 

    for (int i = 0; i < 3; i++) 
     new Button(group, SWT.PUSH).setText("ABC" + i); 

    new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL); 

    Table table = new Table(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION); 
    table.setLinesVisible(true); 
    table.setHeaderVisible(true); 
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); 
    table.setLayoutData(gridData); 

    for (String title : new String[] { "A", "B", "C", "D", "E", "F", "G" }) 
     new TableColumn(table, SWT.NONE).setText(title); 

    for (int i = 0; i < 128; i++) { 
     TableItem item = new TableItem (table, SWT.NONE); 
     item.setText(0, "123"); 
     item.setText(1, "234"); 
     item.setText(2, "345"); 
     item.setText(3, "456"); 
     item.setText(4, "567"); 
     item.setText(5, "678"); 
     item.setText(6, "789"); 
    } 

    for (TableColumn column : table.getColumns()) 
     column.pack(); 

    shell.pack(); 
    shell.open(); 

    while (shell.isDisposed() != true) 
     if (display.readAndDispatch() != true) 
      display.sleep(); 

    display.dispose(); 

는, 결과 화면은 다음과 같은 문제가 있습니다

  1. 수직 분리는 버튼과 같은 "키"로 두 배입니다. 그리드 레이아웃의 맨 위 행은 다음과 같습니다 :
 
ABC1 ABC2 ABC3 | ABC1 ABC2 ABC3 
       | 

내가 버튼처럼 단지 키로 구분을 좀하고 싶습니다.

  1. 가로 분리 기호는 화면 너비의 약 1/10입니다. 그리드에서 행의 전체 너비로 확장하려면 어떻게해야합니까?

  2. 테이블의 열은 포함 된 텍스트의 너비와 같습니다. 이로 인해 테이블 ​​너비가 창의 너비의 약 1/2이됩니다. 나는 테이블의 너비 (그리고 너비에 따라 열의 너비)를 늘려서 창의 너비가 무엇이든 일치하도록 줄 싶습니다. 어떤 점을 달성 할 수있는 방법에 대한 올바른 방향으로 나를 가리킬 수 있습니까?

답변

4

더 많은 공간을 확보하려면 가로 레이블을 사용해야합니다.

Label temp = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL); 
temp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 

column.pack() 호출은 데이터와 일치하도록 열 너비를 변경합니다. 명시 적 크기로 설정하려면 Column 객체에 새 Column으로 속성을 설정하는 대신 속성을 실제로 설정해야합니다. 창과 테이블을 사용하여 모든 열의 동적 크기를 조정하려면 테이블에 대한 ResizeListener를 작성해야합니다. 그렇지 않으면 테이블 크기에 관계없이 열이 동일하게 유지되는 경향이 있습니다.

+0

가로 분리기가 고정됩니다. 세로 레이블을 단추처럼 높이 만드는 방법에 대한 생각은 없습니까? 현재 키가 두 배입니다. – jph

1

세로 구분 기호의 높이는 레이아웃 데이터를 사용하여 설정할 수 있습니다.

Button button = null; 
for (int i = 0; i < 3; i++) { 
    button = new Button(group, SWT.PUSH); 
    button.setText("ABC" + i); 
} 

Label verticalSeparator = new Label(group, SWT.SEPARATOR | SWT.VERTICAL); 
RowData layoutData = new RowData(); 
layoutData.height = button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y; 
verticalSeparator.setLayoutData(layoutData); 
관련 문제