SWT benötige den richtigen SWT style --> org.eclipse.swt.SWT.*

tanzverfuehrung

Bekanntes Mitglied
Ich habe einen kleinen Dialog mit einem ListViewer zum auswählen bestimmter Variablen.
JEdoch benutze 9ich jetzt den Style SWT.TOOL
Java:
	dialog = new Shell(text.getShell(), TOOL);
ICh bräuchte aber oben rechts noch ein kleines x zum schließen des festers..
wenn ich das SWT.CLOSE hinzufüge
Java:
		dialog = new Shell(text.getShell(), TOOL | CLOSE);
..dann ist da gleich wieder so ein dicker rand, was ich nicht möchte.

Gibt es da ein SWT style, was meine wünsche realisiert?
 
(SWT.TOOL | SWT.CLOSE) gibt dir wirklich den Platformspezifischen Tool-Dialog (ja, ich weiss, die titleBar unter Windows ist recht riesig). Wenn dir der nicht passt, musst du eine komplett undekorierte Shell bauen und selbst einen Close-Button implementieren. Ist an und für sich kein Ding, aber halt mit ein klein wenig mehr Arbeit verbunden.
 
Beispiel (Designtechnisch ist es 1. eine Katastrophe und 2. eigentlich identisch zur Variante (SWT.TOOL | SWT.CLOSE) - und 3. ist der Code eher bescheiden 🙂 ):

Java:
import java.util.ArrayList;

public class ShellDialog extends Shell {
	
	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			Display display = Display.getDefault();
			ShellDialog shell = new ShellDialog(display);
			shell.open();
			shell.layout();
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch()) {
					display.sleep();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Create the shell.
	 * 
	 * @param display
	 */
	public ShellDialog(Display display) {
		super(display, SWT.NONE);
		createContents();
	}
	
	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("SWT Application");
		setSize(450, 300);
		
		setLayout(new GridLayout(2, false));
		
		Label lblNewLabel = new Label(this, SWT.NONE);
		lblNewLabel.setText("Dialog Title");
		
		Button buttonClose = new Button(this, SWT.NONE);
		buttonClose.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				ShellDialog.this.dispose();
			}
		});
		buttonClose.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
		buttonClose.setText("X");
		
		ListViewer viewer = new ListViewer(this);
		org.eclipse.swt.widgets.List list = viewer.getList();
		GridData gd_list = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
		gd_list.widthHint = 29;
		list.setLayoutData(gd_list);
		viewer.setContentProvider(new ArrayContentProvider());
		viewer.setLabelProvider(new LabelProvider());
		
		List<String> variables = new ArrayList<>();
		variables.add("Broccoli");
		variables.add("Bundt Cake");
		variables.add("Cabbage");
		variables.add("Candy Canes");
		variables.add("Eggs");
		variables.add("Potato Chips");
		variables.add("Milk");
		variables.add("Soda");
		variables.add("Chicken");
		variables.add("Cinnamon Rolls");
		viewer.setInput(variables);
	}
	
	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
}
Aber du kannst den close-Button ja hinlegen wo du willst. Bedenke nur immer: Was erwartet der Nutzer deiner Applikation am Ende. Mach es also sinnvoll...
 

Zurück
Oben