所以我一直在研究SWT对话框。它看起来应该像这样:
/----------------------------------\
| Label1 |
| [_Text_box_1__________][Button1] |
| |
| Label2 |
| |---------------------|[Button2] |
| | List 1 |[Button3] |
| |---------------------| |
| |
| Label3 |
| |---------------------|[Button4] |
| | List 2 |[Button5] |
| |---------------------| |
| |
| [ Ok ] [ Cancel] |
\----------------------------------/
我已经对RowLayout进行了实验,并为TextBox + Buttons嵌套了Composites,但是它似乎并未水平填充空间。我也尝试过同时使用一列和嵌套Composites以及两列的GridLayout,但它似乎永远无法工作。
谁能建议一种可能对我有用的方法?
编辑:
我设法使其以固定大小工作:
Display display = parent.getDisplay();
Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.TITLE);
shell.setText("Text");
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.marginBottom = 15;
layout.marginTop = 15;
layout.marginLeft = 15;
layout.marginRight = 15;
layout.spacing = 5;
layout.wrap = true;
layout.fill = true;
layout.justify = false;
shell.setLayout(layout);
Label label1 = new Label(shell, SWT.LEFT);
label1.setText("Label 1");
RowData data = new RowData();
data.width = 400;
label1.setLayoutData(data);
Composite comp1 = new Composite(shell, SWT.NONE);
layout = new RowLayout(SWT.HORIZONTAL);
layout.fill = true;
comp1.setLayout(layout);
Text text1 = new Text(comp1, SWT.SINGLE | SWT.BORDER);
data = new RowData();
data.width = 400;
text1.setLayoutData(data);
Button button1 = new Button(comp1, SWT.PUSH | SWT.CENTER);
button1.setText("Button 1");
new Label(shell, SWT.NONE);
Label label2 = new Label(shell, SWT.LEFT);
label2.setText("Label 2");
Composite comp2 = new Composite(shell, SWT.NONE);
layout = new RowLayout(SWT.HORIZONTAL);
comp2.setLayout(layout);
List list1 = new List(comp2, SWT.BORDER);
data = new RowData();
data.width = 400;
data.height = 150;
list1.setLayoutData(data);
Composite comp3 = new Composite(comp2, SWT.NONE);
comp3.setLayout(new RowLayout(SWT.VERTICAL));
Button button2 = new Button(comp3, SWT.PUSH | SWT.CENTER);
button2.setText("Button 2");
data = new RowData();
data.width = 70;
button2.setLayoutData(data);
Button button3 = new Button(comp3, SWT.PUSH | SWT.CENTER);
button3.setText("Button 3");
button3.setLayoutData(data);
new Label(shell, SWT.NONE);
Label label3 = new Label(shell, SWT.LEFT);
label3.setText("Label 3");
Composite comp4 = new Composite(shell, SWT.NONE);
layout = new RowLayout(SWT.HORIZONTAL);
comp4.setLayout(layout);
List list2 = new List(comp4, SWT.BORDER);
data = new RowData();
data.width = 400;
data.height = 150;
list2.setLayoutData(data);
Composite comp5 = new Composite(comp4, SWT.NONE);
comp5.setLayout(new RowLayout(SWT.VERTICAL));
Button button4 = new Button(comp5, SWT.PUSH | SWT.CENTER);
button4.setText("Button 4");
data = new RowData();
data.width = 70;
button4.setLayoutData(data);
Button button5 = new Button(comp5, SWT.PUSH | SWT.CENTER);
button5.setText("Button 5");
button5.setLayoutData(data);
new Label(shell, SWT.NONE);
Composite comp6 = new Composite(shell, SWT.RIGHT_TO_LEFT);
comp6.setLayout(new RowLayout(SWT.HORIZONTAL));
Button cancelButton = new Button(comp6, SWT.CENTER);
cancelButton.setText("Cancel");
data = new RowData();
data.width = 70;
cancelButton.setLayoutData(data);
Button okButton = new Button(comp6, SWT.PUSH | SWT.CENTER);
okButton.setText("OK");
okButton.setLayoutData(data);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
最佳答案
您可以做到这一点而又不依赖于宽度提示(仅当没有其他选择时才应使用):
public static void main(String[] args)
{
new MyDialog(new Shell(new Display())).open();
}
private static class MyDialog extends Dialog
{
protected MyDialog(Shell parentShell)
{
super(parentShell);
setShellStyle(getShellStyle() | SWT.RESIZE);
}
@Override
protected void configureShell(Shell newShell)
{
super.configureShell(newShell);
newShell.setText("Stackoverflow");
}
@Override
protected Control createDialogArea(Composite parent)
{
Composite comp = (Composite) super.createDialogArea(parent);
// Part one
Label one = new Label(comp, SWT.NONE);
one.setText("Label1");
new Label(comp, SWT.NONE);
Text textOne = new Text(comp, SWT.BORDER);
textOne.setText("Textbox1");
Button buttonOne = new Button(comp, SWT.PUSH);
buttonOne.setText("Button1");
// Part two
Label two = new Label(comp, SWT.NONE);
two.setText("Label2");
new Label(comp, SWT.NONE);
List listOne = new List(comp, SWT.BORDER);
listOne.add("List1");
Composite buttonCompOne = new Composite(comp, SWT.NONE);
Button buttonTwoOne = new Button(buttonCompOne, SWT.PUSH);
buttonTwoOne.setText("Button2");
Button buttonTwoTwo = new Button(buttonCompOne, SWT.PUSH);
buttonTwoTwo.setText("Button3");
// Part three
Label three = new Label(comp, SWT.NONE);
three.setText("Label3");
new Label(comp, SWT.NONE);
List listTwo = new List(comp, SWT.BORDER);
listTwo.add("List2");
Composite buttonCompTwo = new Composite(comp, SWT.NONE);
Button buttonThreeOne = new Button(buttonCompTwo, SWT.PUSH);
buttonThreeOne.setText("Button4");
Button buttonThreeTwo = new Button(buttonCompTwo, SWT.PUSH);
buttonThreeTwo.setText("Button5");
// Layout stuff
comp.setLayout(new GridLayout(2, false));
GridLayout layout = new GridLayout(1, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
buttonCompOne.setLayout(layout);
layout = new GridLayout(1, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
buttonCompTwo.setLayout(layout);
textOne.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
buttonOne.setLayoutData(new GridData(SWT.END, SWT.TOP, false, true));
listOne.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
listTwo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
buttonCompOne.setLayoutData(new GridData(SWT.END, SWT.TOP, false, true));
buttonCompTwo.setLayoutData(new GridData(SWT.END, SWT.TOP, false, true));
return comp;
}
}
看起来像这样:
小:
大: