Programowanie obiektowe / języki programowania W. 2 - SWT Struktura typowego formularza SWT Display display = new Display (); final Shell shell = new Shell(display); // Zdefiniowanie układu (layout) I utworzenie widgetów (kontrolek) shell.open (); shell.layout(); // Ułożenie widgetów zgodnie z układem, w tym miejscu // można też użyć shell.pack() do skompaktowania układu while (!shell.isdisposed ()) { if (!display.readanddispatch ()) display.sleep (); } Ustalenie układu Mamy do wyboru pięć typów FillLayout (wszystkie widgety w linii, takich samych rozmiarów), RowLayout (wszystkie widgety w linii poziomej lub pionowej, różne rozmiary) GridLayout (krata z możliwością wypełniania kilku komórek) StackLayout (widgety jeden za drugim w trzecim wymiarze, tylko jeden widoczny w danej chwili) FormLayout (dla każdego widgetu ustalamy współrzędne względne w formularzu i rozmiary) Więcej o układach widgetów: https://www.eclipse.org/articles/article-understanding-layouts/understanding-layouts.htm Najczęściej wykorzystujemy GridLayout (zwłaszcza początkujący ), shell.setlayout(new GridLayout(liczba_kolumn, czy_wszystkie_komórki_są_tej_samej_długości)); Możemy sobie wyobrazić kratę jako kolejno ponumerowane komórki (obramowanie nie jest widoczne, o ile go sami nie włączymy) 1 2 3 4 5 6 7 8 (układ może być oczywiście inny w zależności od liczby kolumn zdefiniowanych w GridLayout ale zawsze obowiązuje zasada numerowania komórek wiersz po wierszu ) 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 11 12 Widgety trafiają do kratek w kolejności, w której je tworzymy. Jeżeli utworzymy dwa przyciski button1 i button2 oraz pole edycji tekstu text1
button1=new Button(shell,SWT.NONE); button1.settext("przycisk pierwszy"); button2=new Button(shell,SWT.NONE); button2.settext("przycisk drugi"); text=new Text(shell, SWT.NONE); Zmiana kolejności widgetów button2=new Button(shell,SWT.NONE); button2.settext("przycisk drugi"); text=new Text(shell, SWT.NONE); button1=new Button(shell,SWT.NONE); button1.settext("przycisk pierwszy"); Ustalanie dodatkowych parametrów konfiguracji układu (jako całości); Obiekt klasy posiada GridLayout ma kilka pól (atrybutów) definiujących parametry układu: horizontalspacing odstęp pionowy po każdym z widgetów verticalspacing odstęp poziomy po każdym z widgetów marginright (Left,Top,Bottom) margines z prawej (lewej, góry dołu) GridLayout gl=new GridLayout(2, true); gl.horizontalspacing=100; gl.verticalspacing=40;
gl.marginright=50; gl.marginleft=50; shell.setlayout(gl); Ustalanie dodatkowych parametrów konfiguracji układu widgetów GridLayout jest związany z klasą GridData określającą parametry układu poszczególnych komórek verticalalignment - wyrównywanie pionowe SWT.CENTER: środek SWT.END (SWT.BOTTOM): dół SWT.FILL: Wypełnienie całości przestrzeni horizontalalignment wyrównywanie poziome SWT.CENTER: srodek SWT.END (or SWT.RIGHT): prawo SWT.FILL: Wypełnienie całości przestrzeni widthhint wskazówka dot. szerokości heighthint - wskazówka dot. wysokości horizontalindent - wcięcie poziome verticalindent wcięcie pionowe horizontalspan liczba zajętych komórek w poziomie verticalspan liczba zajętych komórek w pionie grabexcesshorizontalspace czy rozszerzać układ do szerokości całego okna grabexcessverticalspace czy rozszerzać układ do wysokości całego okna minimumwidth minimalna szerokość minimumheight minimalna wysokość Label a Text
Zazwyczaj układ formularza konstruujemy tak, że w jednym wierszu ustawienie widget typu Label (Etykieta tekst bez możliwości edycji) oraz pole do wprowadzani danych (np. Text, Combo, Button SWT.Check DateTime itp.) labelfirstname=new Label(shell, SWT.NONE); labelfirstname.settext("podaj imię"); firstname=new Text(shell,SWT.BORDER); labellastname=new Label(shell, SWT.NONE); labellastname.settext("podaj nazwisko"); lastname=new Text(shell,SWT.BORDER); labelbirthdate=new Label(shell, SWT.NONE); labelbirthdate.settext("podaj datę urodzenia"); birthdate=new DateTime(shell, SWT.CALENDAR); birthdate=new DateTime(shell, SWT.DROP_DOWN);
Zwróć uwagę na metodę settext ustalającą tekst pojawiający się w etykiecie (występowała już dla przycisków) Puste Label-e a układ Wstawienie pustego widgetu typu Label powoduje przejście następnych widgetów niżej w kracie zdefiniowanej przez GridLayout labeldaneosobowe=new Label(shell, SWT.NONE); labeldaneosobowe.settext("dane OSOBOWE:"); labeldaneosobowe.setfont(new Font(Display.getDefault(), "Chiller", 20, 5)); labelfirstname=new Label(shell, SWT.NONE); labelfirstname.settext("podaj imię"); labelfirstname.setforeground(new Color(null, 255,255,0)); firstname=new Text(shell,SWT.BORDER); firstname.setbackground(new Color(null,220,220,220)); labellastname=new Label(shell, SWT.NONE); labellastname.settext("podaj nazwisko"); labellastname.setforeground(new Color(null, 0,240,0)); lastname=new Text(shell,SWT.BORDER); lastname.setbackground(new Color(null,220,220,220)); labelbirthdate=new Label(shell, SWT.NONE); labelbirthdate.settext("podaj datę urodzenia"); labelbirthdate.setforeground(new Color(null, 240,0,0)); birthdate=new DateTime(shell, SWT.DROP_DOWN); Po zmianie: labeldaneosobowe=new Label(shell, SWT.NONE); labeldaneosobowe.settext("dane OSOBOWE:"); labeldaneosobowe.setfont(new Font(Display.getDefault(), "Chiller", 20, 5)); Label empty=new Label(shell, SWT.NONE); labelfirstname=new Label(shell, SWT.NONE); labelfirstname.settext("podaj imię"); labelfirstname.setforeground(new Color(null, 255,255,0)); firstname=new Text(shell,SWT.BORDER); firstname.setbackground(new Color(null,220,220,220));
labellastname=new Label(shell, SWT.NONE); labellastname.settext("podaj nazwisko"); labellastname.setforeground(new Color(null, 0,240,0)); lastname=new Text(shell,SWT.BORDER); lastname.setbackground(new Color(null,220,220,220)); labelbirthdate=new Label(shell, SWT.NONE); labelbirthdate.settext("podaj datę urodzenia"); labelbirthdate.setforeground(new Color(null, 240,0,0)); birthdate=new DateTime(shell, SWT.DROP_DOWN); Kolory, fonty itp labeldaneosobowe.setfont(new Font(Display.getDefault(), "Chiller", 20, 5)); labelfirstname.setforeground(new Color(null, 255,255,0)); firstname.setbackground(new Color(null,220,220,220)); Parametry konstruktora (JavaDOC - https://www.eclipse.org/swt/javadoc.php)
Typy przycisków SWT.CHECK SWT.RADIO SWT.DEFAULT Widgety zajmujące więcej niż jedną komórkę horizontalspan liczba zajętych komórek w poziomie verticalspan liczba zajętych komórek w pionie