Wenn Sie einen Composite
als einen Container von Arten erstellen, können Sie hinzufügen und entfernen, alles außerhalb in der richtigen Reihenfolge zu bleiben. Durch das Reservieren des Speicherplatzes befindet sich die Schaltfläche zum Löschen immer unter dem Inhalt des Containers.
Ich habe ein Textfeld und eine Schaltfläche Hinzufügen daneben, wenn ich auf Schaltfläche Hinzufügen ich in der Lage bin ein Textfeld hinzuzufügen und löschen Schaltfläche daneben
Zum Beispiel, wenn wir haben einen kleinen Shell
mit einem Add Button
wie Sie erwähnt haben, und einen leeren Raum, um die Text
Widgets hinzuzufügen:
final Composite baseComposite = new Composite(shell, SWT.BORDER);
baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
baseComposite.setLayout(new GridLayout());
final Composite rowsContainerComposite = new Composite(baseComposite, SWT.BORDER);
rowsContainerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
rowsContainerComposite.setLayout(new GridLayout());
final Button addButton = new Button(baseComposite, SWT.PUSH);
addButton.setText("Add");
(Vorerst der leere Raum, alle verfügbaren Raum greifen, aber man kann sich ändern, dass je nach Bedarf)
Wenn Zeilen hinzufügen, Sie zum rowsContainerComposite
hinzufügen:
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
new Row(rowsContainerComposite);
rowsContainerComposite.layout();
}
});
Eine Probe Klasse :
public class Row {
final Composite baseComposite;
public Row(final Composite parent) {
baseComposite = new Composite(parent, SWT.BORDER);
baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
baseComposite.setLayout(new GridLayout(2, false));
final Text text = new Text(baseComposite, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Button deleteButton = new Button(baseComposite, SWT.PUSH);
deleteButton.setText("Delete");
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
baseComposite.dispose();
parent.layout();
}
});
}
}
wenn die zweite Reihe Schaltfläche Löschen geklickt wird (die zweite Zeile gelöscht wird) die Schaltfläche Hinzufügen
Dann zurück in die erste Reihe gehen sollte, wenn gelöscht, Zeilen werden wieder entsprechend verschieben:
die Schaltfläche hinzufügen unter zwei Reihen werden sollte, ist
neu positioniert
die Idee, dass b Wenn Sie den Verbund "Container" verwenden, reservieren Sie den Speicherplatz, zu dem Sie die Zeilen hinzufügen und daraus entfernen möchten. Die Schaltfläche zum Löschen befindet sich immer unterhalb der Zeilen, wenn sie hinzugefügt und entfernt werden.
Voll Beispiel:
public class AddDeleteButtonTest {
private static class Row {
final Composite baseComposite;
public Row(final Composite parent) {
baseComposite = new Composite(parent, SWT.BORDER);
baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
baseComposite.setLayout(new GridLayout(2, false));
final Text text = new Text(baseComposite, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Button deleteButton = new Button(baseComposite, SWT.PUSH);
deleteButton.setText("Delete");
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
baseComposite.dispose();
parent.layout();
}
});
}
}
private final Display display;
private final Shell shell;
public AddDeleteButtonTest() {
display = new Display();
shell = new Shell(display);
shell.setLayout(new FillLayout());
final Composite baseComposite = new Composite(shell, SWT.BORDER);
baseComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
baseComposite.setLayout(new GridLayout());
final Composite rowsContainerComposite = new Composite(baseComposite, SWT.BORDER);
rowsContainerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
rowsContainerComposite.setLayout(new GridLayout());
final Button addButton = new Button(baseComposite, SWT.PUSH);
addButton.setText("Add");
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
new Row(rowsContainerComposite);
rowsContainerComposite.layout();
}
});
}
public void run() {
shell.setSize(200, 200);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(final String... args) {
new AddDeleteButtonTest().run();
}
}
Danke avojak, aber ich brauche etwas, wie oben Bilder – user04556
@ user7999545 erwähnt Diese hübsche viel antwortet, was Sie gefragt haben, wir sind nicht hier, um Ihnen den genauen Code zu geben, um Ihr Bild zu replizieren. Das Formatieren von Text und Schaltflächen liegt außerhalb des Bereichs Ihrer Frage. –
@ user7999545 Diese Bilder waren nicht Teil Ihrer Frage, als ich antwortete, und wie Greg sagte, werde ich nicht Ihren ganzen Code für Sie schreiben. Sie sollten in der Lage sein, einem nahezu identischen Ansatz zu folgen, um zu bekommen, was Sie wollen. – avojak