#eclipse #layout #swt
#eclipse #макет #swt
Вопрос:
В настоящее время я работаю над макетом, в котором я хотел бы иметь полосу прокрутки.У меня есть родитель, у которого есть макет формы (который я не могу изменить). Приведенный ниже пример кода воспроизводит тот же сценарий.
package test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates ScrolledComposite
*/
public class ScrolledCompositeTest {
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
createContents(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
private void createContents(Composite parent) {
parent.setLayout(new FormLayout());
// Create the ScrolledComposite to scroll horizontally and vertically
ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
// Create a child composite to hold the controls
Composite child = new Composite(sc, SWT.NONE);
child.setLayout(new FillLayout());
sc.setBackground(new Color(parent.getDisplay(), 0,0,0));
// Create the buttons
new Button(child, SWT.PUSH).setText("One");
new Button(child, SWT.PUSH).setText("Two");
/*
* // Set the absolute size of the child child.setSize(400, 400);
*/
// Set the child as the scrolled content of the ScrolledComposite
sc.setContent(child);
// Set the minimum size
sc.setMinSize(500, 500);
// Expand both horizontally and vertically
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
}
public static void main(String[] args) {
new ScrolledCompositeTest().run();
}
}
Если я изменю родительский макет на заполнение или сетку, полоса прокрутки будет работать так, как ожидалось.Любая подсказка по этому вопросу будет полезной.
Ответ №1:
Пожалуйста, добавьте FormData
в ScrolledComposite
FormData data = new FormData();
data.top = new FormAttachment(0, 5);
data.left = new FormAttachment(0, 5);
data.bottom = new FormAttachment(100, -5);
data.right = new FormAttachment(100, -5);
sc.setLayoutData(data);
public class ScrolledCompositeTest {
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
createContents(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
private void createContents(Composite parent) {
parent.setLayout(new FormLayout());
// Create the ScrolledComposite to scroll horizontally and vertically
ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
sc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_CYAN));
FormData data = new FormData();
data.top = new FormAttachment(0, 5);
data.left = new FormAttachment(0, 5);
data.bottom = new FormAttachment(100, -5);
data.right = new FormAttachment(100, -5);
sc.setLayoutData(data);
// Create a child composite to hold the controls
Composite child = new Composite(sc, SWT.NONE);
child.setLayout(new FillLayout());
// Create the buttons
new Button(child, SWT.PUSH).setText("One");
new Button(child, SWT.PUSH).setText("Two");
/*
* // Set the absolute size of the child child.setSize(400, 400);
*/
// Set the child as the scrolled content of the ScrolledComposite
sc.setContent(child);
// Set the minimum size
sc.setMinSize(500, 500);
// Expand both horizontally and vertically
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
}
public static void main(String[] args) {
new ScrolledCompositeTest().run();
}
}
Вывод :