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

מסמכים קשורים
תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

11_2009_gui

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

מרצים יקרים, אתר המכללה מאפשר למרצי המכללה להזין את פרטיהם וקורות חייהם. זאת בדומה לאתרים מקבילים של מוסדות אקדמיים בארץ ובעולם. עמודי המרצים נועדו לא

מבוא למדעי המחשב

מבוא למדעי המחשב

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

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

מבוא לתכנות ב- JAVA תרגול 11

עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ

PowerPoint Presentation

מהוא לתכנות ב- JAVA מעבדה 3

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

HTML - Hipper Text Makeup Language

PowerPoint Presentation

מבוא למדעי המחשב

הוספת קישור לאתר אינטרנט תוכן ממשק בדיקת מטלות...3 איחוד אתרי קורסים...5 סל מחזור... 7 חידושים בפעילויות...8 תצורת קורס: כפתורים... 9 פורומים...10 שיפ

מצגת של PowerPoint

ייבוא וייצוא של קבצי אקסל וטקסט

PowerPoint Presentation

מדריך למרצים ומתרגלים 1

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

Slide 1

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

תרגול 1

Slide 1

PowerPoint Presentation

Slide 1

פייתון

מבוא למדעי המחשב

מבוא לתכנות ב- JAVA תרגול 7

PowerPoint Presentation

Titre du document en police Sodexo

Microsoft PowerPoint - rec3.ppt

מבוא למדעי המחשב

PowerPoint Presentation

מסע מדע ו - מסע ברכב שטח ביבשות רחוקות

תרגול 1

Microsoft PowerPoint - 10_threads.ppt

Slide 1

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

מבוא למדעי המחשב

Microsoft Word - sync_LG.doc

PowerPoint Presentation

Microsoft Word - pitaron222Java_2007.doc

PowerPoint Presentation

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

Microsoft PowerPoint - lec10.ppt

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word - I900-Tips_and_Tricks

Slide 1

WinZIP תוכנה לדחיסת קבצים ספטמבר 2007

תרגול 1

המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +

שאלהIgal : מערכים דו מימדיים רקורסיה:

PowerPoint Presentation

Microsoft Word - tips and tricks - wave 5.doc

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

PowerPoint Presentation

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

PowerPoint Presentation

PowerPoint Presentation

תוכן הגדרת שאלת רב-ברירה ]אמריקאית[...2 הגדרת שאלת נכון\לא נכון...8 שאלות אמריקאיות 1

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

תוכן העניינים

תרגול 1

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש

תוכן העניינים

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

תכנות מונחה עצמים א' – תש"ע

PowerPoint Presentation

Microsoft Word - Ass1Bgu2019b_java docx

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

ForMenahelHeshbonot

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

מס' סידורי: ת.ז.: עמוד 1 מתוך 15 פתרון בחינה בתוכנה 1 סמסטר ב', מועד ב',תשע"א 140/900/11 ליאור וולף, מתי שמרת, הדס צור, אסף זריצקי הוראות (נא לקרוא!)

Slide 1

Office 365 ProPlus בחינם לסטודנטים באוניברסיטת בן גוריון בנגב הוראות סטודנטים באוניברסיטת בן גוריון בנגב יכולים להוריד ולהתקין את חבילת התוכנה Office

ISI

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

סדנת תכנות ב C/C++

פרויקט שורשים דמות

מדריך לחיפוש במאגר JCR Journal Citation Reports מעודכן לדצמבר 2015 כל הזכויות שמורות לתחום היעץ, אוניברסיטת חיפה, הספריה

DCA & A/B Testing

מבוא למדעי המחשב - חובלים

שיעור מס' 6 – סבולות ואפיצויות

מקביליות

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

Slide 1

אגף התקשוב, אוניברסיטת בר אילן קורס תוכנת מטלב ויישומיה ד"ר סמדר שץ מימוש ממשק משתמש ע"י GUIDE קורס תוכנת מטלב ויישומיה שיעור מס' 12: שימוש ב- GUIDE -

תמליל:

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

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

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

SWT Widgets אבני הבניין של ממשקים גרפים מוגדרים ב org.eclipse.swt.widgets תת-טיפוסים של המחלקה האבסטרקטית Widget )קישור לתיעוד( האתר של SWT מכיל דוגמאות קצרות )snippets( לשימוש בכל Widget http://www.eclipse.org/swt/widgets/ Shell Table Menu Label Text List Button 4

עוד על Widgets ביצירת Widget את ה"הורה" שלו את הסגנון שלו ה- נגדיר ההורה הוא Widget היורש מ- Composite, מה שאומר שניתן להוסיף אליו Widgets אחרים לדוגמא, כפתור שההורה שלו הוא טאב שההורה שלו הוא חלון יופיע כפתור בתוך הטאב שבחלון Widget מתווסף להורה בזמן הקריאה לבנאי עבור סגנונות קיימים קבועים במחלקה SWT נראה בהמשך

כפתור public class ShellWithButton1 { public static void main(string[] args) { Display display = Display.getDefault(); Shell shell = new Shell(display); shell.setlayout(new FillLayout(SWT.VERTICAL)); shell.settext("example1"); Button ok = new Button(shell, SWT.PUSH); ok.settext("push Me!"); shell.pack(); shell.open(); while (!shell.isdisposed()) { if (!display.readanddispatch()) display.sleep(); display.dispose(); מקשר בין SWT לתצוגה על המסך יצירת חלון והגדרת העיצוב שלו יצירת כפתור והגדרת העיצוב שלו חישובים של איך התצוגה צריכה להיראות ופתיחת החלון לולאת האירועים שחרור משאבים 6

אז מה היה לנו כאן? Display display = Display.getDefault(); מקשר בין SWT לתצוגת מערכת ההפעלה )למשל, המסך( Display Shell shell = new Shell(display); חלון. שימו לב שיצירת חלון לא פותחת אותו עדין. Shell shell.setlayout(new FillLayout(SWT.VERTICAL)); לכל Composite ניתן להוסיף layout שיגדיר כיצד Widgets מסודרים בתוכו ממלאים את ה- Composite Widgets ה- FillLayout ה- Widgets מסודרים בצורה אנכית לפי סדר הוספתם ל- SWT.VERTICAL Composite דומה ל-,FillLayout אבל ה- Widgets שומרים על גודל קבוע RowLayout מסדר את ה- Widgets בגריד )לפי עמודות ושורות( GridLayout 7

אז מה היה לנו כאן? shell.settext("example1"); Button ok = new Button(shell, SWT.PUSH); ok.settext("push Me!"); משתנה בהתאם לטיפוס ה-.Widget בחלון קובע את settext קובע מה כתוב על הכפתור. shell.pack(); הכותרת, בכפתור לחיצה )PUSH( גורם לאובייקט גרפי לחשב ולהתאים את גודלו, למשל בהתאם pack ל- layout, ל- Widgets שבתוכו וכו' shell.open(); פתיחת החלון 8

לולאת האירועים loop( )Event while (!shell.isdisposed ()) { if (!display.readanddispatch()) display.sleep(); display.dispose(); קוד סטנדרטי שמופיע כמעט בכל תכנית SWT כל עוד החלון הראשי של התכנית לא נסגר טפל באירוע הבא בתור ובדוק האם קיים אירוע נוסף אם לא קיים היכנס למצב שינה עד לקבלת אירוע נוסף בסוף משחררים את כל המשאבים שהוקצו ע"י קריאה ל- dispose כאשר משחררים אלמנט גרפי, כל הצאצאים שלו גם משתחררים כאשר משחררים את,Display כל המשאבים הגרפיים משתחררים 9

לולאת האירועים loop( )Event מערכת ההפעלה מודיעה לתוכנית על אירועים: הקשות על המקלדת, הזזת עכבר והקלקה, בחירת אלמנטים, ועוד. ההודעה מתקבלת על ידי עצם יחיד (singleton) מהמחלקה Display, שמייצג את מערכת ההפעלה קבלת אירוע מעירה את התוכנית מהשינה ב- sleep כאשר קוראים ל- readanddispatch ה- display מברר לאיזה רכיב צריך להודיע על האירוע, ומודיע לו הרכיב מפעיל את העצמים מהטיפוס המתאים לסוג האירוע שנרשמו להפעלה על ידי קריאה ל- addlistener 10

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

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

טיפול בארועים במחלקה נפרדת 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 13

טיפול בארועים במחלקה נפרדת Display display = Display.getDefault(); Shell shell = new Shell(display); shell.setlayout(new FillLayout(SWT.VERTICAL)); shell.settext("example2"); Button ok = new Button(shell, SWT.PUSH); ok.settext("push Me!"); ok.addselectionlistener(new ButtonHandler()); shell.pack(); shell.open(); while (!shell.isdisposed()) { if (!display.readanddispatch()) display.sleep(); display.dispose(); 14

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

מחלקה פנימית public class ShellWithLabelAndTextField1 { private Label label; private Text text; public static void main(string[] args) {... public void createshell() {... המחלקה הפנימית ניגשת לשדות הפרטיים של המחלקה העוטפת public class InnerHandler implements KeyListener { public void keypressed(keyevent e) { if (e.character == SWT.CR) { label.settext(text.gettext()); text.settext(""); public void keyreleased(keyevent e) { // TODO Auto-generated method stub 16

מחלקה פנימית public class ShellWithLabelAndTextField1 { private Label label; private Text text; public static void main(string[] args) { ShellWithLabelAndTextField1 shell = new ShellWithLabelAndTextField1(); shell.createshell(); public void createshell() { Display display = new Display(); Shell shell = new Shell(display); shell.setlayout(new RowLayout(SWT.VERTICAL)); label = new Label(shell, SWT.CENTER); label.settext("type text and press [ENTER]"); text = new Text(shell, SWT.LEFT); text.addkeylistener(new InnerHandler()); // pack(), open(), while... Dispose() 17

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

מחלקה אנונימית public class ShellWithLabelAndTextField2 { private Label label; private Text text; public static void main(string[] args) {... public void createshell() {... text.addkeylistener(new KeyListener() { public void keypressed(keyevent e) { if (e.character == SWT.CR) { label.settext(text.gettext()); text.settext(""); public void keyreleased(keyevent e) { // TODO Auto-generated method stub ); סוגר סוגריים של המתודה addkeylistener() // pack(), open(), while... Dispose() 19

שימוש ב Adapter public class ShellWithLabelAndTextField2 { private Label label; private Text text; public static void main(string[] args) {... public void createshell() {... text.addkeylistener(new KeyAdapter() { public void keypressed(keyevent e) { if (e.character == SWT.CR) { label.settext(text.gettext()); text.settext(""); ); public class KeyAdapter implements KeyListener { @Override public void keypressed(keyevent arg0) { //do nothing @Override public void keyreleased(keyevent arg0) { // do nothing // pack(), open(), while... Dispose() 20

המחלקה SWT... מוגדרת ב org.eclipse.swt.swt אוסף של קבועים: אירועים,Activate,MouseDown,FocusIn,Close צבעים,COLOR_BLACK,COLOR_BLUE... תווים,CR,ESC,DEL... אירוע מקשים,ARROW_DOWN,END... עיצובים ניתן להוסיף מס' )bitwise OR( קבועים ע"י שימוש באופרטור SWT.V_SCROLL SWT.H_SCROLL SWT.BORDER 21

דוגמא נוספת רשימת משימות public class TaskList1 { private static final Display display = Display.getDefault(); private static Shell shell; public static void main(string[] args) { TaskList1 tasklist = new TaskList1(); tasklist.createshell(); tasklist.runapplication(); private void createshell() { shell = new Shell(display); shell.settext("my Tasks"); private void runapplication() { shell.pack(); shell.open(); while (!shell.isdisposed()) { if (!display.readanddispatch()) display.sleep(); display.dispose(); נכתוב אפליקציית SWT פשוטה המאפשרת להזין משימות בשדה טקסט, ללחוץ על כפתור ולהוסיף את הטקסט שהוזן לרשימה. נתחיל מבניית שלד האפליקציה 22

הוספת Widgets private void createshell() { shell = new Shell(display); shell.settext("my Tasks"); shell.setlayout(new FillLayout(SWT.VERTICAL)); נוסיף Layout בסיסי ל- Shell, וכן שדה טקסט, כפתור ורשימה כרגע אין מאזינים לאף פעולה //a text field to enter a task Text input = new Text(shell, SWT.LEFT); //a button to add a task to the list Button add = new Button(shell, SWT.PUSH); add.settext("add"); //the list List list = new List(shell, SWT.BORDER); 23

הוספת פונקציונליות //a text field to enter a task final Text input = new Text(shell, SWT.LEFT); //a button to add a task to the list Button add = new Button(shell, SWT.PUSH); add.settext("add"); // the list final List list = new List(shell, SWT.BORDER); // the action to perform when pressing the button add.addselectionlistener(new SelectionAdapter() { @Override public void widgetselected(selectionevent e) { String text = input.gettext(); //add the task to the list, if the input text is not empty if (text!= null && text.length() > 0) { list.add(text); input.settext(""); ); כעת, נוסיף את הפעולה של לחיצה על כפתור תוך שימוש במחלקה אנונימית. הכפתור צריך להכיר את משתנים מקומיים ולכן נשנה ל-.final לחלופין אפשר שיהיו effectively final 24

נטפל בעיצוב החלון Add תחילה, נתכנן איך היינו רוצים שהחלון ייראה וכיצד הוא ישתנה בשינוי גודל החלון Add Add Add 25

עיצוב החלון shell = new Shell(display); shell.settext("my Tasks"); shell.setlayout(new GridLayout(2, false)); // a text field to enter a task final Text input = new Text(shell, SWT.LEFT); input.setlayoutdata(new GridData( GridData.FILL_HORIZONTAL)); // a button to add a task to the list Button add = new Button(shell, SWT.FLAT); add.settext("add"); // the list final List list = new List(shell, SWT.BORDER); GridData listgriddata = new GridData(GridData.FILL_BOTH); listgriddata.horizontalspan = 2; listgriddata.widthhint = 300; listgriddata.heighthint = 300; list.setlayoutdata(listgriddata); נשתמש ב- GridLayout מוסיף אלמנטים לגריד משמאל לימין ומלמעלה למטה לפי הסדר מאפשר הוספת GridData שמציין איך כל Widget יתנהג בגריד הרשימה נמתחת לרוחב ולאורך, תופסת שני טורים, וגודלה המומלץ 300x300 פיקסלים שדה הטקסט נמתח לרוחב שני טורים ברוחב לא אחיד 26

עיצוב החלון עכשיו האפליקציה שלנו נראית כך עוד תוספות? סימון משימה כ"הושלמה" הוספת תאריך יצירת המשימה הוספת תאריך יעד לביצוע המשימה עריכת משימה מחיקת משימה... 27

תוספת - מחיקת משימות מהרשימה נוסיף delete לרשימה שיאזין ללחיצה על KeyListener מ- Widget הרשימה ניתן לקבל את האינדקס של הפריט הנבחר ולמחוק את הפריט // the action to perform when DELETE is pressed on the list list.addkeylistener(new KeyAdapter() { @Override public void keypressed(keyevent e) { if (e.character == SWT.DEL) { int selectionindex = list.getselectionindex(); //if a list item is selected, delete it from the list if (selectionindex >= 0) list.remove(selectionindex); ); 28