ממשק משתמש גרפי בעזרת SWT

Slides:



Advertisements
Similar presentations
תוכנה 1 בשפת ג'אווה אוניברסיטת תל אביב
Advertisements

Object Oriented 33 MCSD DORON AMIR
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
מבוא לתכנות ב WINDOWS ד " ר אבי רוזנפלד ד " ר אריאלה ריכרדסון.
Database Systems 1.  SWT  Updating UI (Why do we need Threads?)  Some Loose Ends 2.
Database Systems, Presented by Rubi Boim 1.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
Graph Toolkit G-2 group Volansky Vered Hadas Yaron Ben Ezra Asaf Sharov Artyom.
דוד שוורץ, עידן זק, נטע צור וחיה כהן. הפונקציונאליות : המשתמש יבחר קובץ שעליו הוא רוצה לבצע את האנליזה, וילחץ עליו עם כפתור ימני בעכבר. יפתח תפריט ובו.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
חלון הפקודות מיועד לבצע פעולה אחת בכל פעם. כיצד אפשר לבצע רשימת פקודות או אפליקציות מורכבות ?
דוד שוורץ, עידן זק, נטע צור וחיה כהן. הפונקציונאליות:  המשתמש בוחר קובץ שעליו הוא רוצה לבצע את האנליזה, ולוחץ עליו עם כפתור ימני בעכבר.  נפתח תפריט.
מנפה שגיאות - DEBUGGER מבוא למדעי המחשב (234114) רועי מלמד
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
1 Standard Widget Toolkit. 2 SWT l a widget toolkit for Java developers l provides a portable API and tight integration with the underlying native OS.
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
תוכנה 1 תבנית העיצוב Observer 1 שחר מעוז בית הספר למדעי המחשב אוניברסיטת תל אביב.
By Kalman Hazins SWT TUTORIAL By Kalman Hazins
תוכנה 1 בשפת Java תרגול מספר 8: הורשה אסף זריצקי ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
1 תרגול 11: Design Patterns ומחלקות פנימיות 1 תוכנה 1.
 Client, Supplier ומה שביניהם ( ADT!).  שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל וחישוב שטח מעגל. הספק יספק ללקוח.
Java Inner Classes. Interfaces interface KeyListener { public void keyPressed(KeyEvent e); public void keyReleased(KeyEvent e); public void keyTyped(KeyEvent.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
שיאון שחוריMilOSS-il מוטיבציה  python זה קל ו C זה מהיר. למה לא לשלב?  יש כבר קוד קיים ב C. אנחנו רוצים להשתמש בו, ולבסס מעליו קוד חדש ב python.
Event Driven, GUI Avshalom Elmalech Eliahu Khalastchi 2010.
1 ממשק משתמש גרפי בעזרת SWT תוכנה 1 בשפת Java ניר אטיאס ואלכסיי זגלסקי.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
תוכנה 1 בשפת Java תרגול מספר 9: נושאים שונים בהורשה אסף זריצקי ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 5 תרשימי מצבים Statecharts למחלקות תגובתיות Reactive Classes הקדמה ודוגמא.
תוכנה 1 בשפת Java שיעור מספר 12:"צייר לי כבשה" (GUI)
האוניברסיטה העברית בירושלים
תרגול 7: מנשקים, פולימורפיזם ועוד
Object Oriented Programming
Object Oriented Programming
By Kalman Hazins SWT TUTORIAL By Kalman Hazins
Operators Overloading
תרגול 7: מנשקים, פולימורפיזם ועוד
Object Oriented Programming
מחלקות classes.
ממשק משתמש גרפי בעזרת SWT
<< Glimmer >>
תוכנה 1 בשפת Java שיעור מספר 7: מבנים מקושרים
מבוא לתכנות מונחה עצמים Object Oriented Programming
© Keren Kalif JSF + Facelets קרן כליף.
DB Programming - Cont Database Systems.
תוכנה 1 תרגול 13 – סיכום.
SQL בסיסי – הגדרה אינדוקטיבית
Static and enum קרן כליף.
מדידת תפוקות אקדמיות | ניראות אקדמית יהודית בר אילן, לימודי מידע
תכנות מכוון עצמים ושפת JAVA
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
ממשקים - interfaces איך לאפשר "הורשה מרובה".
תוכנה 1 בשפת Java שיעור מספר 6: מקושרים
תרגול מס' 6 מחלקות, עצמים, וקצת חוזים
מבוא לתכנות בWINDOWS ב#C
ניתוח מערכות מידע תכנות ב C#
מבוא לתכנות מונחה עצמים Object Oriented Programming
Shell Scripts בסביבת UNIX
תוכנה 1 תרגול 13 – סיכום.
פיתוח אפליקציות אסינכרוניות Windows 10
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Java Inner Classes.
class PrintOnetoTen { public static void main(String args[]) {
DB Programming - Cont Database Systems.
Presentation transcript:

ממשק משתמש גרפי בעזרת SWT תוכנה 1 בשפת Java אסף זריצקי ומתי שמרת

SWT בנויה על העיקרון של publish/subscribe אלמנטים בסיסיים (Widgets) מייצרים אירועים (Events) שאליהם נרשמים מאזינים (Listener) ה Widgets וה- Events מוגדרים ע"י כותבי הספרייה מאזינים נכתבים ע"י המשתמש תגובות שונות לאירועים זהים כתלוי באפליקציה המבנים הבסיסיים של ממשק המשתמש והאירועים שהם מייצרים הם אלמנטים קבועים (יחסית) כמו ה data שראינו בתירגול הקודם. לעומת זאת המאזינים הם שונים מאוד זה מזה – התגובה ללחיצה על כפתור באפליקציה אחת שונה מאוד מאשר באפליקציה אחרת ואפילו שונה מהתגובה ללחיצה על כפתור אחר באותה האפליקציה.

SWT Widgets אבני הבניין של ממשקים גרפים מוגדרים ב org.eclipse.swt.widgets תת-טיפוסים של המחלקה האבסטרקטית Widget Table Menu Shell Label List Button Text

כפתור public class ShellWithButton { public static void main(String[] args) { Display display = Display.getDefault(); Shell shell = new Shell (display); Button ok = new Button (shell, SWT.PUSH); ok.setText ("Push Me!"); ok.setLocation(0,0); ok.setSize(100,30); shell.pack (); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch()) display.sleep (); } display.dispose ();

הוספת טיפול בארועים הכפתור לא מגיב ללחיצות. יש להוסיף טיפול בארוע "לחיצה" על המחלקה המטפלת לממש את המנשק SelectionListener על הכפתור עצמו להגדיר מי העצם (או העצמים) שיטפלו בארוע כמה גישות אפשריות: הגדרת מחלקה שיורשת מכפתור מחלקה שמכילה כפתור כאחד משדותיה יצירת מחלקה עצמאית שתטפל באירועי הלחיצה לכל אחת מהאפשרויות יתרונות וחסרונות שידונו בהמשך

הוספת טיפול בארועים הכפתור לא מגיב ללחיצות. יש להוסיף טיפול באירוע "לחיצה" עלינו לממש מאזין המקבל שמטפל באירוע ולהרשם על הווידג'ט המתאים. כיצד נדע אילו אירועים מייצר ווידג'ט? איזה מנשק עלינו לממש? נסתכל בתיעוד

טיפול בארועים במחלקה נפרדת public class ButtonHandler implements SelectionListener { public void widgetSelected(SelectionEvent e) { if (e.getSource() instanceof Button) { Button b = (Button) e.getSource(); b.setText("Thanks!"); } public void widgetDefaultSelected(SelectionEvent e){ // TODO Auto-generated method stub

טיפול בארועים במחלקה נפרדת public class ShellWithButton { public static void main(String[] args) { Display display = Display.getDefault(); Shell shell = new Shell (display); Button ok = new Button(shell, SWT.PUSH); ok.addSelectionListener(new ButtonHandler()); ok.setText ("Push Me!"); ok.setLocation(0,0); ok.setSize(100,30); shell.pack (); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose ();

טיפול בארועים במחלקה נפרדת לעיתים הטיפול באירוע דורש הכרות אינטימית עם המקור (כדי להימנע מחשיפת המבנה הפנימי של המקור) שימוש במחלקה פנימית יוצר את האינטימיות הדרושה בדוגמא הבאה נרצה לעדכן תווית על סמך קלט מהמשתמש דרושה הכרות לא רק עם יוצר האירוע (Text) אלא גם עם חלקים אחרים במבנה

מחלקה פנימית המחלקה הפנימית ניגשת לשדות הפרטיים של המחלקה העוטפת public class ShellWithLabelAndTextField { private Label l; private Text t; public static void main(String[] args) { ...} public void createShell() {...} public class InnerHandler implements KeyListener { public void keyPressed(KeyEvent e) { if(e.character == SWT.CR){ l.setText(t.getText()); t.setText(""); } public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub המחלקה הפנימית ניגשת לשדות הפרטיים של המחלקה העוטפת

מחלקה פנימית public class ShellWithLabelAndTextField { private Label l; private Text t; public static void main(String[] args) { ShellWithLabelAndTextField shell = new ShellWithLabelAndTextField(); shell.createShell(); } public void createShell() { Display display = new Display (); Shell shell = new Shell (display); GridLayout gl = new GridLayout(); shell.setLayout(gl); l = new Label (shell, SWT.CENTER); l.setText ("Type text and press [ENTER]"); t = new Text(shell, SWT.LEFT); t.addKeyListener(new InnerHandler()); // pack(), open(), while ... Dispose()

שימוש במחלקות אנונימיות בדרך כלל נזדקק רק למאזין יחיד לכל אירוע נשתמש במחלקה לוקאלית אנונימית תזכורת: יצירת מופע חדש של מחלקה ללא שם, שטרם הוגדרה, שיורשת באופן אוטומטי מ className יצירת מופע חדש של מחלקה ללא שם, שטרם הוגדרה, שמממשת באופן אוטומטי את interfaceName new className([argument-list]) {classBody} new interfaceName() {classBody}

מחלקה אנונימית סוגר סוגריים של המתודה addKeyListener() public class ShellWithLabelAndTextField { ... public void createShell() { t.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { if (e.character == NEW_LINE_CHAR) { l.setText(t.getText()); t.setText(""); } public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } ); // pack(), open(), while ... Dispose() סוגר סוגריים של המתודה addKeyListener()

שימוש ב Adapter סוגר סוגריים של המתודה addKeyListener() public class ShellWithLabelAndTextField { ... public void createShell() { t.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.character == NEW_LINE_CHAR) { l.setText(t.getText()); t.setText(""); } } ); // pack(), open(), while ... Dispose() סוגר סוגריים של המתודה addKeyListener()

המחלקה SWT מוגדרת ב org.eclipse.swt.SWT אוסף של קבועים: אירועים – Activate, Close, FocusIn, MouseDown, ... צבעים – COLOR_BLACK, COLOR_BLUE, ... תווים – CR, DEL, ESC, ... אירוע מקשים – ARROW_DOWN, END, ...