SWTを使って簡単なディスプレイを作ろうとしています。これまでのところ、データベースからの情報を正常に表示し、RowLayout を使用して表示しています。各行には GridLayout が含まれています。次のようになります。
私が本当に欲しいのは、ウィンドウの全幅を占めるように行を拡張することです。どうすればこれを達成できますか?
ご協力いただきありがとうございます!
これを実現する通常の方法は、 を使用することGridData
です。これGridData
は、コンポーネントがその親内でどのように動作するか (たとえば、親全体に広がる方法) をコンポーネントに伝えます。
以下を使用して:
component.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
コンポーネントが水平方向にできるだけ多くのスペースを占有するように指示しますが、垂直方向には必要なスペースのみを占有します。
以下は、期待どおりに動作する小さな例です。
public class StackOverflow
{
public static void main(String[] args)
{
Display display = Display.getDefault();
Shell shell = new Shell(display);
/* GridLayout for the Shell to make things easier */
shell.setLayout(new GridLayout(1, false));
for(int i = 0; i < 5; i++)
{
createRow(shell, i);
}
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void createRow(Shell shell, int i)
{
/* GridLayout for the rows, two columns, equal column width */
Composite row = new Composite(shell, SWT.NONE);
row.setLayout(new GridLayout(2, true));
/* Make each row expand horizontally but not vertically */
row.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
/* Create the content of the row, expand horizontally as well */
Button first = new Button(row, SWT.PUSH);
first.setText("FIRST " + i);
first.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
Button second = new Button(row, SWT.PUSH);
second.setText("SECOND " + i);
second.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
}
}
起動後はこんな感じ。
サイズ変更後:
余談ですが、まだ読んでいない場合は、レイアウトに関する Eclipse のチュートリアルを読むことをお勧めします。すべての SWT 開発者は読むべきです。