SWT Композитное выравнивание
Я хотел бы знать, что является нормальной / распространенной практикой для составного объекта SWT.
Я обнаружил, что всякий раз, когда я добавляю Composite (с любым примером пользовательского интерфейса: TextBox или Button), пользовательский интерфейс, созданный в Composite, не выравнивается по самому начальному краю Composite. (Вы можете наблюдать это, установив цвет фона Composite)
В Composite есть некоторый пробел / отступ перед интерфейсом TextBox. Это вызывает смещение в форме GUI, которую я создаю, если предыдущий пользовательский интерфейс не создан в Composite.
Я хочу знать, какова общая практика, чтобы привести их в соответствие? Установив некоторые отрицательные отступы, чтобы переместить Composite назад так, чтобы пользовательский интерфейс в нем выглядел так, как будто выровнен?
Пример кода ниже!
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.makeColumnsEqualWidth = false;
shell.setLayout(layout);
Text t1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
t1.setText("Test box...");
Composite c = new Composite(shell, SWT.NONE);
// c.setBackground(new Color(shell.getDisplay(), 255,0,0));
layout = new GridLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = true;
c.setLayout(layout);
Text t2 = new Text(c, SWT.SINGLE | SWT.BORDER);
t2.setText("Test box within Composite... not aligned to the first textbox");
Button b = new Button(c, SWT.PUSH);
b.setText("Button 1");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
2 ответа
Это исправит это:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
Text t1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
t1.setText("Test box...");
Composite c = new Composite(shell, SWT.NONE);
GridLayout layout = new GridLayout(2, true);
layout.marginWidth = 0; // <-- HERE
c.setLayout(layout);
Text t2 = new Text(c, SWT.SINGLE | SWT.BORDER);
t2.setText("Test box within Composite... not aligned to the first textbox");
Button b = new Button(c, SWT.PUSH);
b.setText("Button 1");
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Просто установите marginWidth
если GridLayout
в 0
,
Просто подсказка: вы можете установить количество столбцов и элемент равной ширины в конструкторе GridLayout
,
GridLayout
имеет поля по умолчанию, связанные с ним. Я бы предложил вам прочитать эту статью
http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html