2013-06-19 12 views
8

私はシェルでグリッドレイアウトを使用しています。私はウィジェットの位置を制御したい。あなたが見ることができるように、下のボタンは4行目になければなりません。私はwindowbuilderプラグインを使用しています、そして、それはそれらを望ましい場所に置くことができます。グリッドレイアウトでウィジェットの行と列を設定する方法は?

my shell using windowbuilder

問題は、私はソースコード内の配置命令を見ることができないです。私はそれらをプログラム的な方法で配置することができます。ここにソースコードウィンドウビルダーが生成します。

package dgsj.Chapter04.examples.ch4; 

import org.eclipse.swt.widgets.*; 

public class GridLayout2x2 { 
    private static GridData data_1; 
    private static GridData data_2; 

    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setMinimumSize(new Point(123, 30)); 
     shell.setSize(126, 123); 
     GridLayout layout = new GridLayout(); 
     layout.numColumns = 3; 
     shell.setLayout(layout); 

     GridData data = new GridData(GridData.FILL_BOTH); 
     data.grabExcessHorizontalSpace = false; 
     data.widthHint = 200; 
     data.grabExcessVerticalSpace = false; 
     Button one = new Button(shell, SWT.PUSH); 
     one.setText("one"); 
     one.setLayoutData(data); 

     data = new GridData(GridData.FILL_BOTH); 
     Button two = new Button(shell, SWT.PUSH); 
     two.setText("two"); 
     two.setLayoutData(data); 
     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 

     data_2 = new GridData(GridData.FILL_BOTH); 
     Button four = new Button(shell, SWT.PUSH); 
     four.setText("four"); 
     four.setLayoutData(data_2); 
     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 

     new Label(shell, SWT.NONE); 
     new Label(shell, SWT.NONE); 

     Button btnNewButton = new Button(shell, SWT.NONE); 
     btnNewButton.setText("New Button"); 

     data_1 = new GridData(GridData.FILL_BOTH); 
     data_1.grabExcessVerticalSpace = false; 
     data_1.grabExcessHorizontalSpace = false; 
     Button three = new Button(shell, SWT.PUSH); 

     three.setText("three"); 
     three.setLayoutData(data_1); 

     shell.pack(); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       display.sleep(); 
      } 
     } 
     display.dispose(); 
    } 
} 
+0

は、他の情報を収容することになっているグリッドの空白の「セル」はありますか? –

+0

いくつかのビューでは、それらは完全に空白であり、その1つの目的はレイアウトを調整することです。他のビューには、何らかのエラーを表示するために表示される妥当性検査ラベルがあります。 –

答えて

10

GridLayoutでいくつかのセルを「スキップ」する唯一の方法は、空のコントロールでそれらを埋めるためであり、それはWindowBuilderは、それらのnew Label(shell, SWT.NONE);線で何をするかです。プログラムで与えられた行/列にコントロールを配置する場合は、追加する空のLabel(または他の見えないコントロール)の必要な数を数えなければなりません。

+0

あなたは完全に正しいです。おかげで –

3

FormLayoutは、GridLayoutよりも柔軟性があります。 必要な場合は、ウィジェットFormDataを取得し、その設定を変更して、実行時にウィジェットを再配置するように強制することができます。

EclipseのSWT Layoutビューは大きな助けになるかもしれません。ここで

はあなたのレイアウトを再現するいくつかのコードです:

import org.eclipse.swt.*; 
import org.eclipse.swt.layout.*; 
import org.eclipse.swt.widgets.*; 

public class MyLayout { 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell (display); 
     FormLayout formLayout = new FormLayout(); 
     shell.setLayout (formLayout); 

     Button button0 = new Button (shell, SWT.PUSH); 
     button0.setText ("button0"); 
     FormData data = new FormData(); 
     data.left = new FormAttachment (0, 0); 
     data.right = new FormAttachment (button1, 0, SWT.DEFAULT); 
     button0.setLayoutData (data); 

     Button button1 = new Button (shell, SWT.PUSH); 
     button1.setText ("button1"); 
     data = new FormData(); 
     data.left = new FormAttachment (button3, 0, SWT.LEFT); 
     data.right = new FormAttachment (button3, 0, SWT.RIGHT); 
     button1.setLayoutData (data); 

     Button button2 = new Button (shell, SWT.PUSH); 
     button2.setText ("button2"); 
     data = new FormData(); 
     data.left = new FormAttachment (button3, 0, SWT.LEFT); 
     data.right = new FormAttachment (button3, 0, SWT.RIGHT); 
     data.top = new FormAttachment (button1, 0, SWT.DEFAULT); 
     button2.setLayoutData (data); 

     Button button3 = new Button (shell, SWT.PUSH); 
     button3.setText ("button3"); 
     data = new FormData(); 
     data.right = new FormAttachment (button4, 0, SWT.DEFAULT); 
     data.bottom = new FormAttachment (100, 0); 
     button3.setLayoutData (data); 

     Button button4 = new Button (shell, SWT.PUSH); 
     button4.setText ("button4"); 
     data = new FormData(); 
     data.right = new FormAttachment (100, 0); 
     data.bottom = new FormAttachment (100, 0); 
     button4.setLayoutData (data); 

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

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
      } 

     display.dispose(); 
    } 
} 
+2

ありがとう、しかし、問題は私たちがツールを書いていることであり、私たちのユーザーは私たちが開発しているツールでフォームを作成する人です。残念なことに、フォームレイアウトを使用することはあまりにも複雑すぎます。だから私はグリッドレイアウトに悩まされていると思う。 –

関連する問題