1 / 49

Biblioteka SWT

Biblioteka SWT. czyli JAVA okienkowo ;). Wykonali:. kpr. pchor. rez. Paweł Pasiecznik Tomasz Pyszka Marcin Stelmach Michał Świdrak Paweł Wcisło. Plan. Przegląd graficznych interfejsów Javy SWT – jak to ugryźć ?? SWT + pliki *.jar Podstawy SWT

velma
Download Presentation

Biblioteka SWT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Biblioteka SWT czyli JAVA okienkowo ;) Wykonali: kpr. pchor. rez. Paweł Pasiecznik Tomasz Pyszka Marcin Stelmach Michał Świdrak Paweł Wcisło

  2. Plan • Przegląd graficznych interfejsów Javy • SWT – jak to ugryźć ?? • SWT + pliki *.jar • Podstawy SWT • Podstawy: Label, Text, Button, List, Combo, Composite, Listeners • Layouty w SWT Plan

  3. Graficzne interfejsy Javy • AWT (Abstract Windowing Toolkit) – korzysta z obiektów dostępnych w danym systemie operacyjnym, zadaniem komponentów wchodzących w skład AWT jest bowiem jedynie pewnego rodzaju „opakowanie” tego, co oferuje system • SWING – nie korzystamy z obiektów dostępnych w systemie, elementy sterujące napisane są całkowicie w Javie. Wady: wolne działanie, wygląd nienaturalny Zalety: duża funkcjonalność • SWT (Standard Widget Toolkit) – dostępny jest zestaw elementów sterujących, które opierają się na rodzimych obiektach danego systemu. Do ich obsługi wykorzystywany jest interfejs JNI (Java Native Interface). Graficzne interfejsy Javy

  4. Systemy Operacyjne a SWT Dla każdego systemu operacyjnego dostępna jest odpowiednia wersja SWT. (Dodajemy odpowiedni plik dla danego systemu - swt.jar) • Windows – musimy dodać odpowiedni plik dll swt-win32-*.dll • Linux (GTK) – oprócz swt.jar dodajemy również swt-pi.jar • Solaris Motif • AIX Motif • HPUX Motif • Photon QNX • Mac OS X Systemy operacyjne a SWT

  5. Eclipse + SWT • Odwiedzamy stronke www.eclipse.org • Ściągamy Eclipsa i biblioteke SWT • Tworzymy nowy projekt w eclipsie • Dodajemy biblioteke swt.jar do projektu Eclipse + SWT

  6. Pliki jar i SWT – w czym problem ?? Rodzaje tworzenia i uruchamiania pliku jar: • Kopiujemy pliki biblioteki swt *.dll i *.jar do tego samego katalogu gdzie znajduje się stworzony przez nas plik HelloWorld.jar Uruchomienie: #java –jar HelloWorld.jar • Kopiujemy pliki biblioteki swt do katalogu w którym znajduje się plik HelloWorld.jar. Podczas uruchamiania podajemy scieżkę do katalogu z biblioteka swt zawierajacy pliki *.dll Uruchomienie: #java –Djava.library.path=„scieżka_do_katalogu” –jar HelloWorld.jar Pliki jar i SWT – w czym problem ??

  7. Linki • SWT: http://www.eclipse.org/swt/ • Eclipse: http://www.eclipse.org/downloads/ • API: http://help.eclipse.org/help31/nftopic/org.eclipse.platform.doc.isv/reference/api/index.html Linki

  8. Wstęp do podstaw SWT Obiekt Display – reprezentuje sesję w SWT. Sesja ta rozumiana jest jako połączenie między naszą aplikacją SWT a systemem operacyjnym. Zawiera metody rozpoczynające działanie obsługi zdarzeń i koordynuje wątek interfejsu użytkownika z pozostałymi częściami działającego programu. Obiekt Shell – pierwszy element tego typu jest głównym oknem aplikacji. Okno możemy przesuwać, minimalizować itp. Kolejne okna, czyli obiekty typu Shell, mogą być tworzone na zasadzie okien potomnych, zależnych od innych, już istniejących. Wstęp do podstaw SWT

  9. Przykład SWT import org.eclipse.swt.widgets.*; import org.eclipse.swt.*; public class SWTHello { public static void main(String[] args) { Display display = Display.getDefault(); Shell sShell = new Shell(); sShell.setText("Example SWT"); sShell.setSize(new Point(300, 200)); sShell.setLayout(null); Label label = new Label(sShell, SWT.NONE); label.setBounds(new Rectangle(50, 50, 175, 41)); label.setFont(new Font(Display.getDefault(), "Tahoma", 24, SWT.NORMAL)); label.setText("Hello World"); sShell.open(); while (!sShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); // WAZNE!!! Musimy zwolnić ręcznie zaalokowane zasoby systemu // operacyjnego } } Przykład SWT

  10. Label labels

  11. Text texts

  12. Button buttons

  13. List lists

  14. Combo combos

  15. Composite composites

  16. Group groups

  17. Key Listener listeners

  18. Mouse Listener listeners

  19. Listeners (metody) • Mouse Track Listener (mouseEnter, mouseExit and mouseHover) • Mouse Move Listener (mouseMove) • Jeśli kursor poruszy się nad obiektem • Text Listeners: • ModifyListener (modifyText) • VerifyListener (verifyText) • Focus Listeners: • FocusListener (focusGained, focusLost) • TraverseListener:(keyTraversed) listeners

  20. Zawansowane możliwości SWT • Plan: • Tabele • Zakładki • Suwaki i Pasek postępu • Drzewa • Grafika • Okna dialogowe • Zaawansowana obsługa zdarzeń Zawansowane możliwości SWT- kontekst

  21. Tabele – ogólna charakterystyka Tworzymy tabele: Table table1 = new Table(shell, SWT.BORDER); Możliwe style tabeli: BORDER, H_SCROLL, V_SCROLL, SINGLE, MULTI, CHECK, FULL_SELECTION i HIDE_SELECTION. Możliwe opcje dla tabeli: • table1.setLinesVisible(true); • table1.setHeaderVisible(true); Zawansowane możliwości SWT- Tabele

  22. Tabele – kolumny Tworzenie kolumny: TableColumn name = new TableColumn(table1,SWT.LEFT); Możliwe style kolumny: LEFT, RIGHT i CENTER. Dla każdej kolumny powinno ustawić się jeszcze nazwę oraz rozmiar kolumny: • name.setText("Name"); • name.setWidth(50); Zawansowane możliwości SWT– Tabele -> kolumny

  23. Tabele – wiersze Tworzenie wierzsza: TableItem item1 = new TableItem(table1,SWT.NONE); Brak stylów wiersza, więc powinno się użyć stylu: NONE (0). Wypełnianie wiersza: • item1.setText(new String[] {"Sarah","15","390 Sussex Ave"}); Zawansowane możliwości SWT– Tabele -> wiersze

  24. Tabele – podsumowanie Czynności potrzebne do implementacji tabeli: • Stworzenie tabeli • Stworzenie kolumn dla danej tabeli • Dodawanie wierszy do tabeli Wizualizacja tabel: • Ustawienie kolorów: setBackground(Color) i set Foreground(Color) • Widoczność linii oraz nagłówkó: setLinesVisible(boolean) setHeaderVisible(boolean). Zawansowane możliwości SWT– Tabele -> podsumowanie

  25. Zakładki Tworzenie TabFolder: TabFolder tabFolder1 = new TabFolder(shell,SWT.NONE); Możliwe style TabFolder: BORDER. Tworzenie TabItem: TabItem item1 = new TabItem(tabFolder1,SWT.NONE); Do każdego TabItem powinno ustawić się nazwę zakładki oraz • item1.setText("Buttons"); • item1.setControl(Composite); Zawansowane możliwości SWT- Zakładki

  26. Suwaki i pasek postępu Tworzenie: Slider slider1 = new Slider(shell, SWT.HORIZONTAL); Scale scale1 = new Scale(shell, SWT.HORIZONTAL); ProgressBar progressBar1 = new ProgressBar(shell,SWT.HORIZONTAL) • Możliwe style: BORDER, HORIZONTAL i VERTICAL. Metody używane dla powyższych suwaków i paska postępu: • setSelection(int); • setMaximum(int); • setMinimum(int); Dla Slider: setThumb(int) - rozmiar suwaka Dla Scale: setPageIncrement(int) - liczba podziałek Zawansowane możliwości SWT– Suwaki i pasek postępu

  27. Drzewa Tworzenie drzewa: Tree tree = new Tree(shell, SWT.MULTI | SWT.BORDER); Możliwe style:BORDER, MULTI, SINGLE i CHECK. Tworzenie liści: TreeItem treeItem = new TreeItem(tree, SWT.NONE); opcjonalnie TreeItem treeItem = new TreeItem(tree, SWT.NONE, index); Możliwe metody: setText(String) - dodanie tekstu setImage(Image) - dodanie ikony do liścia Zawansowane możliwości SWT- Drzewa

  28. Grafika – informacje ogólne Grafika w SWT umożliwia nam następujące rzeczy: • Rysowanie oraz wypełnianie prostokątów, owali, linii, wielokątów, i tekstów • Ustawienie kolorów wypełnienia oraz pierwszoplanowych • wycinanie regionów • kopiowanie rejonów do obrazów lub innych obszarów z naszego systemu • Wyświetlanie obrazów • Pobranie oraz ustawienie tekstu/czcionki systemowych. Z grafiką związane są głównie następujące kalasy: • Canvas • GC • Image Zawansowane możliwości SWT- Grafika –> informacje ogólne

  29. Rysowanie Aby móc rysować trzeba stworzyć przynajmniej dwa obiekty: Canvas canvas = new Canvas(shell, SWT.BORDER); GC gc = new GC(canvas); Przy rysowaniu stosuje się podobne metody jak w Swing-u np. : • gc.drawRectangle(3, 5, 20, 25); • gc.fillRectangle(30, 5, 20, 25); • gc.setForeground(blue); • gc.drawLine(80, 20, 100, 80); • gc.drawOval(40, 40, 10, 10); • gc.drawPolygon(new int[] {100, 100, 120, 120, 140, 100}); • gc.setBackground(red); • gc.drawString("Text", 120, 20); • gc.setClipping(40, 60, 40, 40); • gc.fillOval(30, 50, 30, 25); Należy pamiętać o zwolnieniu zasobów!!! (gc.dispose()) Zawansowane możliwości SWT- Grafika –> rysowanie

  30. Grafika – obrazy Tworzenie obrazu: Image img = new Image(display, "EclipseBannerPic.jpg") lub jeżeli obraz znajduje się w archiwum jar InputStream is = getClass().getResourceAsStream("EclipseBannerPic.jpg") Image img = new Image(display, is) Możliwe jeste także stworzenie kopii obrazu z następującymi flagami: • SWT.IMAGE_COPY - kopiuje obraz bez zmian • SWT.IMAGE_GRAY - obraz w odcieniach szarości • SWT.IMAGE_DISABLE - „ustawia obraz jako nieaktywny” Przykład Image gray = new Image(display, Image, SWT.IMAGE_GRAY); Rysujemy za pomocą metody: drawImage(Image,width,height) Należy pamiętać o zwolnieniu zasobów!!! (img.dispose()) Zawansowane możliwości SWT- Grafika –> obrazy

  31. Grafika – odmalowywanie Komponenty graficzne w SWT nie są automatycznie odmalowywane !!! Po każdej utracie aktywności okna możemy utracić nasze komponenty graficzne. Aby ubezpieczyć się przed takim stanem możemy zaimplementować poniższą metodę: shell.addPaintListener(new PaintListener() { publicvoid paintControl(PaintEvent e) { GC gc = e.gc; Display d = e.widget.getDisplay(); Color color = new Color(d, 120, 42, 105); // Color red = display.getSystemColor(SWT.COLOR_RED); gc.setForeground(color); Font font = new Font(d, "Arial", 24, SWT.BOLD | SWT.ITALIC); gc.setFont(font); gc.drawString("Text", 20, 20); color.dispose(); font.dispose(); } Metoda ta jest wykonywana przy każdej potrzebie odmalowania okna. Metodę tą można także wywołać za pomocą metody redraw() Zawansowane możliwości SWT- Grafika –> odmalowywanie

  32. Okna dialogowe - Message Box • Tworzenie MessageBox: MessageBox messageBox = new MessageBox(shell, SWT.ICON_QUESTION |SWT.YES | SWT.NO | SWT.CANCEL); • Ustawienie komunikatu: messageBox.setMessage("Do you like apples?") • Ustawianie tytułu messageBox.setText("MessageBoxDemo") • Możliwe style MessageBox: ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING i ICON_WORKING. • Możliwe style kombinacje „odpowiedzi” Message box: • OK | CANCEL • YES | NO • YES | NO | CANCEL • RETRY | CANCEL • ABORT | RETRY | IGNORE • Otwieranie okna /okno jest modalne i zwraca wybraną opcje/ intresponse = messageBox .open() Zawansowane możliwości SWT– Okna dialogowe –> MessageBox

  33. Message Box cd. • Przechwytywanie odpowiedzi: switch(response) { case SWT.YES: System.out.println("Yes, the user likes apples."); break; case SWT.NO: System.out.println("No, the user does not like apples."); break; case SWT.CANCEL: System.out.println("The user cancelled."); break; } Zawansowane możliwości SWT– Okna dialogowe –> MessageBox cd.

  34. ColorDialog • Tworzymy: ColorDialog colorDialog1 = new ColorDialog(shell); • Ustawiamy tytuł: colorDialog1.setText("ColorDialog Demo"); • Ustawiamy kolor domyślny: colorDialog1.setRGB(new RGB(255,0,0)); • Wywołanie: RGB selectedColor = colorDialog1.open(); Zawansowane możliwości SWT– Okna dialogowe –> ColorDialog

  35. FontDialog FontData defaultFontData = new FontData("Courier",12,SWT.ITALIC); FontDialog fontDialog = new FontDialog(shell, SWT.NONE); fontDialog.setText("FontDialog Demo"); fontDialog.setRGB(new RGB(0,0,255)); fontDialog.setFontData(defaultFontData); FontData fontData = fontDialog.open(); if (fontData != null) { fontData.getName(); fontData.getHeight(); fontData.getStyle(); fontDialog.getRGB(); } Zawansowane możliwości SWT– Okna dialogowe –> FontDialog

  36. DirectoryDialog & FileDialog • DirectoryDialog DirectoryDialog directoryDialog = new DirectoryDialog(shell); directoryDialog.setText("DirectoryDialog Demo"); directoryDialog.setFilterPath("C:/Program Files"); String selectedDirectory = directoryDialog.open(); • FileDialog String[] filterExtensions = {"*.txt","*.doc", "*.*"}; FileDialog fileDialog = new FileDialog(shell, SWT.OPEN) fileDialog.setText("FileDialog Demo"); fileDialog.setFilterPath("C:/"); fileDialog.setFilterExtensions(filterExtensions); String selectedFile = fileDialog.open(); Zawansowane możliwości SWT– Okna dialogowe –> FileDialog

  37. Okna dialogowe Do stworzenia okna drukowania używamy PrintDialog Do stworzenia SWT nie zawiera gotowego InputDialog aby stworzyć InputDialog należy samemu zaimplementować powyższy komponent rozszerzając ją o klasę Dialog np. class InputDialog extends Dialog { public MyData open() { } } Zawansowane możliwości SWT– Okna dialogowe –> Okna dialogowe

  38. Zaawansowana obsługa zdarzeń • W SWT w przeciwieństwie do Swing-a sami musimy martwić się o hierarchię zdarzeń. Tzn. Proces główny steruje nasłuchiwaniem i sterowaniem wszystkich zdarzeń więc bardzo dobrym sposobem jest implementacja w metodach nasłuchiwaczy tworzenie wątków przy większych implementacjach np.. button.addSelectionListener(new SelectionAdapter() { publicvoid widgetSelected(SelectionEvent e) { new MyThread().start() } }); • W SWT nie powinniśmy się odwoływać bezpośrednio do elementów sterujących będąc w innym wątku niż główny. Aby odwołać się do tych elementów z innych wątków jak główny powinniśmy użyć następujących metod: syncExec(Runnable) oraz asyncExex(Runnable) np.. Display.getDefault().asyncExec(new Runnable() { public run() { label.setText(„Bez obaw!”); } }; Zawansowane możliwości SWT– Zaawansowana obsługa zdarzeń

  39. Podsumowanie Warto także zapoznać się z następującymi rzeczami: • Menu (Menu, MenuItem) • Wyskakujące menu (jak powyżej) • Transfer zasobów pomiędzy aplikacjami (Drag, Drop i Clipboard) Należy zawsze pamiętać o zwalnianiu zasobów następujących klas: • Image • GC • Color • Font • Itp.. Najkrócej mówiąc takich które tworzymy na podstawie zasobów systemowych Zawansowane możliwości SWT– Okna dialogowe –> Podsumowanie

  40. Layouty w SWT • Dla przypomnienia: layouty to narzędzie do nadawania kontrolkom odpowiedniego rozmieszczenia oraz kształtu (rozmiaru) na obiektach klasy Composite. • SWT dostarcza standardowo kilka rodzajów layoutów, • Ponadto jest możliwość tworzenia nowych layoutów dostosowanych do potrzeb użytkownika. Layouty w SWT

  41. Czemu używać layoutów? • SWT nie rozmieszcza ani nie dobiera rozmiarów dla kontrolek automatycznie -> jeśli sami tego nie zrobimy, kontrolka nie będzie widoczna. Można to zrobić bezpośrednio np. w konstruktorze naszego formularza lub w „resize listenerze”. Jednak dopóki nie ma solidnych podstaw to tego, żeby to zrobić samemu, lepiej tego nie robić . • Tutaj z pomocą przychodzą layouty. Czemu używać layoutów?

  42. Sposób użycia • Import odpowiednich pakietów: import org.eclipse.swt.layout.*; • Metoda setLayout(Layout) klasy Composite: Shell shell = new Shell(); shell.setLayout(new RowLayout()); • Klasy layoutów udostępniają również klasy opisujące kontrolkę na formie o danym layoucie (klasy te mają nazwy, które powstają poprzez zastąpienie tekstu Layout tekstem Data w nazwie klasy layoutu): Button button = new Button(shell, SWT.PUSH); button.setLayoutData(new RowData(50, 40)); Sposób użycia

  43. FillLayout • Najprostszy dostępny layout. • Umieszcza kontrolki w rzędzie lub kolumnie. Wszystkie mają taki sam rozmiar. • fillLayout.type = SWT.HORIZONTAL (default): • fillLayout.type = SWT.VERTICAL : FillLayout

  44. RowLayout • Możliwości FillLayout + • zawijanie kontrolek na następnego wiersza • możliwość ustawienia wielkości marginesów oraz odległości między kontrolkami • możliwość ustawienia wielkości pojedynczej kontrolki: kontrolka.setLayoutData(new RowData(50, 40)); • Parametry RowLayout: RowLayout

  45. RowLayout cd. • wrap: • true (default): • false: • pack • true (default): • false: • justify • true: RowLayout cd.

  46. GridLayout • Layout o największych możliwościach, ale najtrudniejszy w użyciu. • Kontrolki umieszczamy na siatce. • Parametry GridLayout: • numColumns – liczba kolumn • makeColumnsEqualWidth – wszystkie kolumny będą miały taką samą szerokość (domyślnie false) • marginWidth, marginHeight, horizontalSpacing, verticalSpacing. • Parametry GridData: • horizontalAlignment: BEGINNING, CENTER, END, FILL • verticalAlignment: j/w • horizontalIndent – lewy margines w komórce • horizontalSpan, verticalSpan – określają, ile kolumn lub wierszy zajmuje dana kontrolka • grabExcessHorizontalSpace, grabExcessVerticalSpace • widthHint, heightHint GridLayout

  47. GridLayout - przykład Display display = new Display (); Shell shell = new Shell (display); GridLayout gridLayout = new GridLayout (); gridLayout.numColumns = 2; shell.setLayout (gridLayout); Label label0 = new Label (shell, SWT.NONE); label0.setText ("label0"); GridData data = new GridData (); data.widthHint = 50; data.horizontalAlignment = GridData.END; label0.setLayoutData (data); Text text1 = new Text (shell, SWT.BORDER); text1.setText ("text1"); Combo combo2 = new Combo (shell, SWT.NONE); combo2.setItems (new String [] {"Item 1", "Item 2", "Item 2"}); combo2.setText ("combo2"); List list3 = new List (shell, SWT.BORDER); list3.setItems (new String [] {"Item 1", "Item 2", "Item 2"}); data = new GridData (); data.widthHint = 100; data.horizontalAlignment = GridData.FILL; data.verticalAlignment = GridData.FILL; data.verticalSpan = 2; data.grabExcessVerticalSpace = true; list3.setLayoutData (data); Group group4 = new Group (shell, SWT.NONE); group4.setText ("group4"); GridLayout - przykład

  48. FormLayout • Podobno o największych (?) możliwościach. • O ile w przypadku poprzednich layoutów określenie dla kontrolki obiektu NazwaLayoutuData (RowData, GridData) było opcjonalne, w przypadku FormLayout jest to niezbędne (w przeciwnym razie kontrolki zostaną umieszczone jedna na drugiej). • Zasada rozmieszczenia kontrolek przy użyciu FormLayoutu polega na podaniu położenia danej kontrolki w stosunku do innej (tj. całej formy lub konkretnej kontrolki znajdującej się już na formie). FormLayout

  49. FormLayout - przykład Display display = new Display (); Shell shell = new Shell (display); FormLayout formLayout = new FormLayout (); shell.setLayout (formLayout); Label label0 = new Label (shell, SWT.NONE); label0.setText ("label0"); FormData data = new FormData (); data.width = 50; label0.setLayoutData (data); Text text1 = new Text (shell, SWT.BORDER); text1.setText ("text1"); data = new FormData (); data.left = new FormAttachment (0, 50); text1.setLayoutData (data); Label label2 = new Label (shell, SWT.NONE); label2.setText ("label2"); data = new FormData (); data.width = 50; data.top = new FormAttachment (0, 30); label2.setLayoutData (data); Combo combo3 = new Combo (shell, SWT.NONE); combo3.setItems (new String [] {"Item 1", "Item 2", "Item 2"}); combo3.setText ("combo3"); data = new FormData (); data.left = new FormAttachment (0, 50); data.top = new FormAttachment (0, 30); combo3.setLayoutData (data); FormLayout - przykład

More Related