2012-02-10 20 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. 縦のセパレータは、ボタンなどの「高さ」の約2倍です。グリッドレイアウト内の一番上の行は次のようになります。
 
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()の呼び出しは、データと一致するように列の幅を変更するものです。明示的なサイズに設定する場合は、実際に列のオブジェクトを新しい列で作成するのではなく、実際に属性を設定する必要があります。ウィンドウとテーブルですべての列のサイズを動的に変更するには、テーブルのResizeListenerを記述する必要があります。それ以外の場合は、表のサイズに関係なく列は同じ傾向にあります。

+0

これは、水平セパレータを修正します。どのように縦のラベルをボタンのように背の高いものにするかについての考えはありますか?現在は2倍の高さです。 – 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); 
関連する問題