This document provides a summary of the Standard Widget Toolkit (SWT) for Java GUI development. It begins with a brief history of Java GUIs including AWT, Swing, and the introduction of SWT. It then covers installing SWT, creating basic widgets like buttons and labels, using layouts, and handling events. The document provides code examples for creating a simple application with SWT. It aims to introduce developers to the major concepts for building graphical user interfaces with SWT.
Integrating external products into eclipseGirish Balre
One of the nice things about an IDE is that you can do the majority of your development tasks in one application — hence, integrated. It takes time away from
your work to have to switch from your IDE to another program. This presentation talks about how external applications can be made a part of an Eclipse IDE by hosting them within Eclipse and integrating them to leverage Eclipse offered usability.
I have seen many of the students and mobile users are attracted to smartphone and their mobile applications. This is the start to code an Android application at basic level
Integrating external products into eclipseGirish Balre
One of the nice things about an IDE is that you can do the majority of your development tasks in one application — hence, integrated. It takes time away from
your work to have to switch from your IDE to another program. This presentation talks about how external applications can be made a part of an Eclipse IDE by hosting them within Eclipse and integrating them to leverage Eclipse offered usability.
I have seen many of the students and mobile users are attracted to smartphone and their mobile applications. This is the start to code an Android application at basic level
Presentation for meetup Submit PHP by Anatoliy Sieryi (Full-Stack developer at Binary Studio)
Video: https://www.youtube.com/edit?video_id=tzQRcMcO1-I&video_referrer=watch
Writing and Testing JavaScript-heavy Web 2.0 apps with JSUnitAlex Chaffee
With the advent of the so-called Web 2.0 platform, more and more applications are using client-side JavaScript for vital features. In fact, some applications are so JS-heavy that they redefine JavaScript as a full-fledged application development language. In this tutorial we discuss some architectural considerations of JS- and AJAX-heavy applications and present in detail our testing framework, with plenty of code examples.
SWTBot is a open source UI testing tool for SWT and Eclipse based applications. It requires bare minimum learning since it is Java based and integrates well with the JUnit framework.
An ideal unit testing tool for SWT and Eclipse based applications developers.
Getting Started with XCTest and XCUITest for iOS App TestingBitbar
Watch a live presentation at http://offer.bitbar.com/getting-started-with-xctest-and-xcuitest-for-ios-app-testing
XCTest has been part of Xcode for few years already, but it is finally catching up and more developers are getting on the bandwagon. XCTest and XCUITest provide feature-rich capabilities for iOS developers and test automation folks to implement different levels of tests using Xcode features and supported programming languages, Objective-C and Swift.
Stay tuned and join our upcoming webinars at http://bitbar.com/testing/webinars/
In this presentation, Prashant Sharma of Valuebound has talked about ReactJS - a JavaScript library for building user interfaces. Check out the agendas to know what is there for you.
----------------------------------------------------------
Get Socialistic
Our website: http://valuebound.com/
LinkedIn: http://bit.ly/2eKgdux
Facebook: https://www.facebook.com/valuebound/
Twitter: http://bit.ly/2gFPTi8
Presentation for meetup Submit PHP by Anatoliy Sieryi (Full-Stack developer at Binary Studio)
Video: https://www.youtube.com/edit?video_id=tzQRcMcO1-I&video_referrer=watch
Writing and Testing JavaScript-heavy Web 2.0 apps with JSUnitAlex Chaffee
With the advent of the so-called Web 2.0 platform, more and more applications are using client-side JavaScript for vital features. In fact, some applications are so JS-heavy that they redefine JavaScript as a full-fledged application development language. In this tutorial we discuss some architectural considerations of JS- and AJAX-heavy applications and present in detail our testing framework, with plenty of code examples.
SWTBot is a open source UI testing tool for SWT and Eclipse based applications. It requires bare minimum learning since it is Java based and integrates well with the JUnit framework.
An ideal unit testing tool for SWT and Eclipse based applications developers.
Getting Started with XCTest and XCUITest for iOS App TestingBitbar
Watch a live presentation at http://offer.bitbar.com/getting-started-with-xctest-and-xcuitest-for-ios-app-testing
XCTest has been part of Xcode for few years already, but it is finally catching up and more developers are getting on the bandwagon. XCTest and XCUITest provide feature-rich capabilities for iOS developers and test automation folks to implement different levels of tests using Xcode features and supported programming languages, Objective-C and Swift.
Stay tuned and join our upcoming webinars at http://bitbar.com/testing/webinars/
In this presentation, Prashant Sharma of Valuebound has talked about ReactJS - a JavaScript library for building user interfaces. Check out the agendas to know what is there for you.
----------------------------------------------------------
Get Socialistic
Our website: http://valuebound.com/
LinkedIn: http://bit.ly/2eKgdux
Facebook: https://www.facebook.com/valuebound/
Twitter: http://bit.ly/2gFPTi8
01. Introduction to programming with javaIntro C# Book
In this chapter we will take a look at the basic programming terminology and we will write our first Java program. We will familiarize ourselves with programming – what it means and its connection to computers and programming languages.
BLCN532 Lab 1Set up your development environmentV2.0.docxmoirarandell
BLCN532 Lab 1
Set up your development environment
V2.0
Introduction
This course introduces students to blockchain development for enterprise environments. Before you can develop software applications, you need to ensue your development environment is in place. That means you’ll need all the tools and infrastructure installed and configured to support enterprise blockchain software development projects.
In this lab you’ll set up your own Hyperledger Fabric development environment and install the course software from the textbook. When you finish this lab, you’ll have a working development environment and will be ready to start running and modifying blockchain applications.
The instructions in your textbook are for Mac and Linux computers.
However
, there is no guarantee that your installation of MacOS or Linux is completely compatible with the environment in which the commands from the textbook work properly. For that reason, I
STRONGLY SUGGEST
that you acquire an Ubuntu 16.04 Virtual Machine (VM) for your labs. Using an Ubuntu 16.04 VM will make the labs far easier to complete.
The instructions in this course’s labs assume that your computer runs the Windows operating system. If you run MacOS or Linux, you can get
Vagrant
and
VirtualBox
for those operating systems and follow the gist of the “Initial setup for Windows computers”.
Lab Deliverables:
To complete this lab, you must create a
Lab Report file
and submit the file in iLearn. The Lab Report file must be a Microsoft Word format (.docx), and have the filename with the following format:
BLCN532_SECTION_STUDENTID_LASTNAME_FIRSTNAME_Lab01.docx
· SECTION is the section number of your current course (2 digits)
· STUDENTID is your student ID number (with leading zeros)
· LASTNAME is your last name, FIRSTNAME is your first name
To get started, create a Microsoft Word document (.docx) with the correct filename for this lab. You’ll be asked to enter text and paste screenshots into the lab report file.
NOTE: All screenshots MUST be readable. Use the Ubuntu Screen Capture utility (see the lab video.) Make sure that you label each screenshot (i.e. Step 2.1.3) and provide screenshots in order. For commands that produce lots of output, I only want to see the last full screen when the command finishes. Provide FULL screenshots, NOT cropped images.
SECTION 1: Initial setup for Windows computers (Chapter 3)
Step 1.1: Install Oracle Virtualbox (Windows, Linux, MacOS)
Oracle Virtualbox is an open source virtualization environment that allows you to run multiple virtual machines and containers on a single personal computer. Virtualbox is free and it is easy to install.
In your favorite web browser, navigate to:
https://www.virtualbox.org/
and click the “Download Virtualbox” button. Click the “Windows hosts” link to download the main installation executable. You should also click the “All supported platforms” under the “Extension Pack” heading to download extra software supp.
Step-by-Step Introduction to Apache Flink Slim Baltagi
This a talk that I gave at the 2nd Apache Flink meetup in Washington DC Area hosted and sponsored by Capital One on November 19, 2015. You will quickly learn in step-by-step way:
How to setup and configure your Apache Flink environment?
How to use Apache Flink tools?
3. How to run the examples in the Apache Flink bundle?
4. How to set up your IDE (IntelliJ IDEA or Eclipse) for Apache Flink?
5. How to write your Apache Flink program in an IDE?
how to write functional tests with Selenium. how to set up Selenium Testing On Grails Apps In Continuous
Integration Using two approaches: The long way – using Maven and/or Ant The fast way, using the grails-
selenium-rc plug-in - ( see
http://buildchimp.com/wordpress/?p=241 )
How to Split Bills in the Odoo 17 POS ModuleCeline George
Bills have a main role in point of sale procedure. It will help to track sales, handling payments and giving receipts to customers. Bill splitting also has an important role in POS. For example, If some friends come together for dinner and if they want to divide the bill then it is possible by POS bill splitting. This slide will show how to split bills in odoo 17 POS.
Unit 8 - Information and Communication Technology (Paper I).pdfThiyagu K
This slides describes the basic concepts of ICT, basics of Email, Emerging Technology and Digital Initiatives in Education. This presentations aligns with the UGC Paper I syllabus.
Ethnobotany and Ethnopharmacology:
Ethnobotany in herbal drug evaluation,
Impact of Ethnobotany in traditional medicine,
New development in herbals,
Bio-prospecting tools for drug discovery,
Role of Ethnopharmacology in drug evaluation,
Reverse Pharmacology.
How to Make a Field invisible in Odoo 17Celine George
It is possible to hide or invisible some fields in odoo. Commonly using “invisible” attribute in the field definition to invisible the fields. This slide will show how to make a field invisible in odoo 17.
Operation “Blue Star” is the only event in the history of Independent India where the state went into war with its own people. Even after about 40 years it is not clear if it was culmination of states anger over people of the region, a political game of power or start of dictatorial chapter in the democratic setup.
The people of Punjab felt alienated from main stream due to denial of their just demands during a long democratic struggle since independence. As it happen all over the word, it led to militant struggle with great loss of lives of military, police and civilian personnel. Killing of Indira Gandhi and massacre of innocent Sikhs in Delhi and other India cities was also associated with this movement.
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdfTechSoup
In this webinar you will learn how your organization can access TechSoup's wide variety of product discount and donation programs. From hardware to software, we'll give you a tour of the tools available to help your nonprofit with productivity, collaboration, financial management, donor tracking, security, and more.
This is a presentation by Dada Robert in a Your Skill Boost masterclass organised by the Excellence Foundation for South Sudan (EFSS) on Saturday, the 25th and Sunday, the 26th of May 2024.
He discussed the concept of quality improvement, emphasizing its applicability to various aspects of life, including personal, project, and program improvements. He defined quality as doing the right thing at the right time in the right way to achieve the best possible results and discussed the concept of the "gap" between what we know and what we do, and how this gap represents the areas we need to improve. He explained the scientific approach to quality improvement, which involves systematic performance analysis, testing and learning, and implementing change ideas. He also highlighted the importance of client focus and a team approach to quality improvement.
Instructions for Submissions thorugh G- Classroom.pptxJheel Barad
This presentation provides a briefing on how to upload submissions and documents in Google Classroom. It was prepared as part of an orientation for new Sainik School in-service teacher trainees. As a training officer, my goal is to ensure that you are comfortable and proficient with this essential tool for managing assignments and fostering student engagement.
The Art Pastor's Guide to Sabbath | Steve ThomasonSteve Thomason
What is the purpose of the Sabbath Law in the Torah. It is interesting to compare how the context of the law shifts from Exodus to Deuteronomy. Who gets to rest, and why?
Synthetic Fiber Construction in lab .pptxPavel ( NSTU)
Synthetic fiber production is a fascinating and complex field that blends chemistry, engineering, and environmental science. By understanding these aspects, students can gain a comprehensive view of synthetic fiber production, its impact on society and the environment, and the potential for future innovations. Synthetic fibers play a crucial role in modern society, impacting various aspects of daily life, industry, and the environment. ynthetic fibers are integral to modern life, offering a range of benefits from cost-effectiveness and versatility to innovative applications and performance characteristics. While they pose environmental challenges, ongoing research and development aim to create more sustainable and eco-friendly alternatives. Understanding the importance of synthetic fibers helps in appreciating their role in the economy, industry, and daily life, while also emphasizing the need for sustainable practices and innovation.
3. History of Java GUI
AWT – Abstract Windowing Toolkit
First released in 1995 as part of JDK 1.0 by Sun
Heavyweight GUI components – a Java component creates a peer
component on the operating system and the peer draws itself.
Least Common Denominator problem – for simple GUI components
creating a peer works, what about the components that are only
available on some platforms and not others? If you want to write code
that’s truly portable – you have to use components that are available on
all platforms
The logic makes sense – but how do you develop a serious application
using just the basic components (available on all platforms)?
You don’t …
Enter Swing
4. History of Java GUI (Cont.)
Swing (JFC – Java Foundation Classes)
Released in 1998 as part of JDK 1.1
Lightweight GUI components – no need for operating system
“peer”-based drawing. Let’s draw the components ourselves.
Lightweight – there is no actual weight (operating system
component) behind the Java component.
Nice toolkit with enhanced Model-View-Controller architecture
and superior graphics 2D library.
Portable? You bet. Any problems? Now that you are not actually
using the operating system components – you are just mimicking
the behavior of the operating system. Hence, the look and feel
as well as the response speed are not the same.
Swing got much better over time
Still, very few commercial applications are written in Swing.
5. History of Java GUI (Cont.)
SWT (Standard Widget Toolkit)
GUI toolkit released in November 2001
Was initially designed to write the now extremely famous and
popular Eclipse IDE
“Best of both worlds” approach – use native functionality when
available, and Java implementation when unavailable
Takes on the appearance and behavior of the native platform
Because of its close bond with the operating system, SWT
needs to be ported separately for every platform
Currently, implementations of SWT are already available for all
major desktop operating systems and some handheld devices
The code YOU write will be portable for all the platforms that
have SWT implementations for them (unless you decide to do
some platform specific stuff like OLE on windows)
http://www.eclipse.org/swt/ - SWT home page
6. Installing SWT
To compile and run SWT applications you need
1. SWT jars (usually just swt.jar)
2. SWT native libraries
Detailed Instructions on obtaining and “installing”
1. Go to http://www.eclipse.org/swt and follow one of the many
mirror links
2. This will bring you to another page, where you want to follow the
“Latest Release” link
3. This should bring you to a page which will say “Release Build: “ in
bold letters on the very top
4. Scroll down to the bottom of the page till you see “SWT Binary and
Source” section
5. Pick the platform you intend to develop on from the list (e.g.
Windows XP) and click on “(http)” to start downloading the zip file
6. Extract the contents of the zip file into a directory and you are
ready for the final step(s) (let’s say our directory path is C:SWT)
7. Installing SWT (Cont.)
7. You need to include swt.jar (and possibly other jars) from the C:SWT
folder in your classpath (for an example on setting classpath see
http://www.moreservlets.com/Using-Tomcat-4.html#Set-CLASSPATH)
8. You also need to include the native library files (e.g. *.dll) from
C:SWT in your java.library.path.
a. The easiest way to do this one is to execute the following
command from a regular java program
System.out.println(System.getProperty(“java.library.path”));
which will give you a list of the directories in your “library path”.
You can then copy the native library files from C:SWT to one of
those directories.
-OR-
b. Simply provide the path when running java
java –Djava.library.path=C:SWT classname
8. Creating Widgets
SWT Javadoc - http://www.jlab.net/eclipse/doc/3.1/index.html
Simplest SWT program (explained over the next few slides)
1. import org.eclipse.swt.widgets.*;
2. import org.eclipse.swt.widgets.Shell;
3. public class HelloWorld {
4. public static void main(String[] args) {
5. Display display = new Display();
6. Shell shell = new Shell(display);
7. shell.setText("Hello World");
8. shell.setSize(250, 100);
9.
10. shell.open();
11.
12. while (!shell.isDisposed()) {
13. if (!display.readAndDispatch()) {
14. display.sleep();
15. }
16. }
17. display.dispose();
18. }
19. }
9. Creating Widgets (Cont.)
Think of Shell object (line 6) being almost the same as a JFrame in
Swing, i.e. the highest-level container, which contains other widgets (e.g.
buttons, labels etc.) inside of it
Unlike Swing
1. You need to create Display object (line 5), which represents the
underlying windowing system. This in turn serves as a parent to the
Shell. (In SWT, every widget you create will always have its parent
passed into the widget’s constructor.)
2. You need to keep the Shell open to listen for events with a while loop
(lines 12-16). Otherwise, the Shell will immediately close itself.
3. Since you are not just writing some Java code (having the luxury of
garbage collector clean up after you), but are actually requesting some
heavyweight resources from the underlying platform – you need to
dispose of those resources when you are done with them(line 17).
(Luckily, disposing of the parent disposes of its child, so 99% of time you
will not be running around disposing of widgets right and left.)
If you are a Swing guy, and the above 3 things greatly bother you – you
can write a simple SWTUtil class to help you deal with it …
10. Homegrown SWT Utility
SWTUtil.java
import org.eclipse.swt.widgets.*;
public class SWTUtil {
private static Display display = new Display();
public static Shell getShell() {
Shell shell = new Shell(display);
return shell;
}
public static void openShell(Shell shell) {
shell.open();
// This loop keeps the shell open constantly listening for events
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
11. SWT Utility in Action
“Simplest SWT program” rewritten
using SWTUtil class
import org.eclipse.swt.widgets.*;
public class HelloWorld {
public static void main(String[] args) {
Shell shell = SWTUtil.getShell();
shell.setText(“Still Hello World");
shell.setSize(250, 100);
SWTUtil.openShell(shell);
}
}
12. Widget creation explained
A widget in SWT is created by
1. Specifying parent
2. Specifying style
A parent is the container that the widget is created inside of (e.g.
Shell).
Style is any constant from the SWT class (SWT.PUSH,
SWT.BORDER, SWT.LEFT etc).
All styles applicable to the widget can be found in the Javadoc for
that widget (as well as its superclasses if any).
If more than one style is desired – separate them out with a “|”
bitwise operator (e.g. SWT.MULTI |
SWT.V_SCROLL|SWT.H_SCROLL| SWT.BORDER creates a multiline
textarea that has vertical and horizontal scrollbars and a border
around it). If no specific style is desired – use SWT.NONE. The style
you are requesting is only a hint, so if the underlying platform
doesn’t support it – you are out of luck.
13. Label
Unselectable, uneditable text
SWT.VERTICAL or SWT.HORIZONTAL can be used together with
SWT.SEPARATOR to create a label that is a horizontal/vertical separator
LabelWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.GridLayout;
3. import org.eclipse.swt.widgets.*;
4. public class LabelWorld {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("Label World");
8. shell.setLayout(new GridLayout()); // layouts are explained later
9.
10. // Create labels
11. new Label(shell, SWT.NONE).setText("Regular label");
12. new Label(shell, SWT.SEPARATOR);
13. new Label(shell, SWT.SEPARATOR|SWT.HORIZONTAL);
14.
15. // pack and show
16. shell.pack();
17. SWTUtil.openShell(shell);
18. }
19. }
14. Button
Once a button – always a button. All types of buttons are created using the Button
class. Push buttons, radio buttons, check buttons, toggle buttons and even flat
buttons.
ButtonWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.GridLayout;
3. import org.eclipse.swt.widgets.*;
4. public class ButtonWorld {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("Button World");
8. shell.setLayout(new GridLayout(2, true)); // layouts are explained later
9.
10. new Button(shell, SWT.PUSH | SWT.FLAT).setText("Flat Push Button");
11. new Button(shell, SWT.CHECK).setText("Check Button");
12. new Button(shell, SWT.TOGGLE).setText("Toggle Button");
13. new Button(shell, SWT.RADIO).setText("Radio Button");
14.
15. // pack and show
16. shell.pack();
17. SWTUtil.openShell(shell);
18. }
19. }
15. Text
Different types of text widgets are created using Text class by providing the
appropriate styles
TextWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.GridLayout;
3. import org.eclipse.swt.widgets.*;
4. public class TextWorld {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("Text World");
8. shell.setLayout(new GridLayout()); // layouts are explained later
9.
10. new Text(shell, SWT.NONE).setText("Missing something ...");
11. new Text(shell, SWT.BORDER); // regular textfield
12. new Text(shell, SWT.PASSWORD | SWT.BORDER).setText("password");
13. new Text(shell, SWT.READ_ONLY | SWT.BORDER).setText("Can't type inside");
14. new Text(shell, SWT.MULTI | SWT.V_SCROLL | SWT.WRAP
15. | SWT.BORDER).setText("nnn");
16.
17. // pack and show
18. shell.pack();
19. SWTUtil.openShell(shell);
20. }
21. }
16. List
Pick from a list – single or multiple selection available
ListWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.GridLayout;
3. import org.eclipse.swt.widgets.*;
4. public class ListWorld {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("List World");
8. shell.setLayout(new GridLayout(2, true)); // layouts are explained later
9.
10. String[] items = "One Two Three Four Five Six".split(" ");
11. List one = new List(shell, SWT.SINGLE | SWT.BORDER);
12. one.setItems(items);
13. one.select(2);
14. List two = new List(shell, SWT.MULTI | SWT.BORDER);
15. two.setItems(items);
16. two.setSelection(items);
17.
18. // pack and show
19. shell.pack();
20. SWTUtil.openShell(shell);
21. }
22. }
17. Combo
Benefits of both Text and List widgets in one!
ComboWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.GridLayout;
3. import org.eclipse.swt.widgets.*;
4. public class ComboWorld {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("Combo World");
8. shell.setLayout(new GridLayout(3, true)); // layouts are explained later
9.
10. String[] items = "One Two Three Four Five Six".split(" ");
11. Combo one = new Combo(shell, SWT.DROP_DOWN);
12. one.setItems(items);
13. Combo two = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);
14. two.setItems(items);
15. Combo three = new Combo(shell, SWT.SIMPLE);
16. three.setItems(items);
17.
18. // pack and show
19. shell.pack();
20. SWTUtil.openShell(shell);
21. }
22. }
18. Group
Used to group widgets together. (Very similar to JPanel in Swing)
GroupWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.GridLayout;
3. import org.eclipse.swt.widgets.*;
4. public class GroupWorld {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("Group World");
8. shell.setLayout(new GridLayout()); // layouts are explained later
9.
10. Group buttonGroup = new Group(shell, SWT.SHADOW_OUT);
11. buttonGroup.setText("Six buttons");
12. buttonGroup.setLayout(new GridLayout(3, true));
13. for(int i = 0; i < 6; i++) {
14. new Button(buttonGroup, SWT.RADIO).setText("Bottle " + (i + 1));
15. }
16.
17. // pack and show
18. shell.pack();
19. SWTUtil.openShell(shell);
20. }
21. }
19. Browser
One of the newer widgets of SWT for displaying web content.
Cool stuff!!! (See the sample application later)
BrowserWorld.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.browser.Browser;
3. import org.eclipse.swt.layout.FillLayout;
4. import org.eclipse.swt.widgets.Shell;
5. public class BrowserWorld {
6. public static void main(String[] args) {
7. Shell shell = SWTUtil.getShell();
8. shell.setText("Browser World");
9. shell.setLayout(new FillLayout());
10.
11. Browser browser = new Browser(shell, SWT.BORDER);
12. browser.setSize(900, 500);
13. browser.setUrl("http://www.eclipse.org/swt/");
14.
15. // pack and show
16. shell.pack();
17. SWTUtil.openShell(shell);
18. }
19. }
21. SWT Layouts
Layouts first introduced in AWT
Ease burden of laying out components
Promote cross-platform GUI design
SWT offers 5 layouts:
1. FillLayout
2. RowLayout
3. StackLayout
4. GridLayout
5. FormLayout
You set the composite’s layout by calling setLayout()
You don’t have to use a layout, but do you really want your widgets to
disappear when the user resizes the window?
More on layouts
http://www.eclipse.org/articles/Understanding%20Layouts/Understanding%20Layouts.htm
22. FillLayout
Places all widgets in either a single column or a single row depending on if
SWT.VERTICAL or SWT.HORIZONTAL is used
Makes all widgets the same size
FillLayoutExample.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.FillLayout;
3. import org.eclipse.swt.widgets.*;
4. public class FillLayoutExample {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("FillLayoutExample");
8. shell.setLayout(new FillLayout(SWT.HORIZONTAL));
9.
10. for(int i = 0; i < 3; i ++) {
11. new Button(shell, (i % 2 == 0) ? SWT.RADIO : SWT.PUSH).setText("Button " + i);
12. new Text(shell, SWT.BORDER).setText("same size");
13. }
14.
15. // pack and show
16. shell.pack();
17. SWTUtil.openShell(shell);
18. }
19. }
23. RowLayout
Similar to FillLayout - places all widgets in either a single column or a single row depending on if SWT.VERTICAL
or SWT.HORIZONTAL is used
Doesn’t force all widgets to be the same size
Can wrap to a new row or column if it runs out of space
Can use RowData objects to determine initial heights/widths for controls
RowLayoutExample.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.RowData;
3. import org.eclipse.swt.layout.RowLayout;
4. import org.eclipse.swt.widgets.*;
5. public class RowLayoutExample {
6. public static void main(String[] args) {
7. Shell shell = SWTUtil.getShell();
8. shell.setText("RowLayoutExample");
9. shell.setLayout(new RowLayout(SWT.HORIZONTAL));
10.
11. for(int i = 0; i < 3; i ++) {
12. new Button(shell, (i % 2 == 0) ? SWT.RADIO : SWT.PUSH).setText("Button " + i);
13. new Text(shell, SWT.BORDER).setLayoutData(new RowData(5, 50));
14. }
15.
16. // pack and show
17. shell.pack();
18. SWTUtil.openShell(shell);
19. }
20. }
24. StackLayout
Similar to CardLayout in Swing. The basic idea is that all widgets are stacked on top of each other and you can
only see one at a time.
Need to set topControl attribute for the layout to show any widget on top
Need to call layout() on the Composite every time you reassign topControl
StackLayoutExample.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.custom.StackLayout;
3. import org.eclipse.swt.events.*;
4. import org.eclipse.swt.widgets.*;
5. public class StackLayoutExample {
6. public static void main(String[] args) {
7. final Shell shell = SWTUtil.getShell();
8. shell.setText("RowLayoutExample");
9. shell.setLayout(new StackLayout());
10.
11. final Button button1 = new Button(shell, SWT.PUSH);
12. button1.setText("Button One");
13. final Button button2 = new Button(shell, SWT.PUSH);
14. button2.setText("Button Two");
15. class StackLayoutAdapter extends SelectionAdapter {
16. public void widgetSelected(SelectionEvent event) {
17. ((StackLayout)shell.getLayout()).topControl =
18. (event.widget == button1) ? button2 : button1;
19. shell.layout();
20. }
21. }
22. button1.addSelectionListener(new StackLayoutAdapter());
23. button2.addSelectionListener(new StackLayoutAdapter());
24.
25. ((StackLayout)shell.getLayout()).topControl = button1;
26. shell.pack();
27. SWTUtil.openShell(shell);
28. }
29. }
25. GridLayout
Lays out controls in a grid.
A lot of people love this powerful layout.
You can easily specify what you want to happen when the composite is
resized
6 attributes (defaults are preset):
1. int horizontalSpacing – horizontal space in pixels between
adjacent cells
2. int verticalSpacing – vertical space in pixels between adjacent
cells
3. boolean makeColumnsEqualWidth – forces all columns to be
same width
4. int marginWidth – margin in pixels along right and left edges
5. int marginHeight – margin in pixels along top and bottom edges
6. int numColumns – number of columns for the layout
GridLayout(int numColumns, boolean makeColumnsEqualWidth)
Uses GridData objects to provide for better control
Too many options to list …
Warning for Swing programmers – DO NOT TRY TO REUSE GridData
objects
Instead, you need to create a new GridData object for every widget that
needs non-default behavior
26. GridLayoutExample.java
1. import org.eclipse.swt.SWT;
2. import org.eclipse.swt.layout.*;
3. import org.eclipse.swt.widgets.*;
4. public class GridLayoutExample {
5. public static void main(String[] args) {
6. Shell shell = SWTUtil.getShell();
7. shell.setText("GridLayoutExample");
8. shell.setLayout(new GridLayout(2, false)); // 2 columns, same width
9.
10. // Username
11. new Label(shell, SWT.RIGHT).setText("Username:");
12. Combo cmbUsername = new Combo(shell, SWT.DROP_DOWN);
13. cmbUsername.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
14. cmbUsername.setItems(new String[]{"Howard", "Admin", "Kalman"});
15. cmbUsername.setText("Admin");
16.
17. // Password
18. new Label(shell, SWT.RIGHT).setText("Password:");
19. new Text(shell, SWT.BORDER | SWT.PASSWORD).GridData(GridData.FILL_HORIZONTAL));
20.
21. // Login Button
22. Button loginButton = new Button(shell, SWT.PUSH | SWT.FLAT);
23. loginButton.setText("Proceed to your account");
24. GridData data = new GridData(GridData.FILL_HORIZONTAL);
25. data.horizontalSpan = 2; // span 2 columns
26. loginButton.setLayoutData(data);
27. shell.pack();
28. SWTUtil.openShell(shell);
29. }
30. }
27. FormLayout
Considered the most complex layout of SWT
Based on y = ax + b (not that most people who use it care)
MAXIMUM flexibility
People who understand it – love it
The basic idea is that you layout the widgets relative to each other or to the enclosing
composite
Needs a tutorial of its own and is therefore not covered here …
28. Event Handling
If you are familiar with Swing – this last part should be a joke.
SWT widgets can listen for events to happen.
If you would like to hear when and what they hear – you need to attach a listener to
the widget
Listener is basically an interface that defines when certain behaviors happen
Sometimes, listener tries listening out for two many things, but you only care to listen
for one particular event
In such a case – you need an adapter. Adapter is a class that implements the
interface and from which you can just extend and override the method you are
interested in.
Some of the popular listeners/adapters are listed below
FocusListener/FocusAdapter – listens for focus gained and focus lost events
KeyListener/KeyAdapter – listens for key releases and key presses
ModifyListener(only has 1 method) – listens for text modifications
VerifyListener – listens for (and potentially intercepts) text modifications
MouseListener/MouseAdapter – listens for mouse button presses
SelectionListener/SelectionAdapter – listens for selection events (similar to
ActionListener in Swing)
31. syncExec() / asyncExec()
You should only be updating user interfaces from the user interface thread.
For example, say you create a Label in your main thread. Then, you have a separate thread that
does some sort of a long computation. Then, you want to update your label with the result of the
second thread’s computation. You CANNOT just call label.setText(newValue) in your second
thread.
Instead, you have to call either syncExec(Runnable) or asyncExec(Runnable) methods on the
instance of Display
// Say you run a thread that calculates new time approximately every second
// and tries to update a label
new Thread(new Runnable() {
public void run() {
Display display = shell.getDisplay();
while(!shell.isDisposed()) {
try {
display.asyncExec(new Runnable() {
public void run() {
clock.setText((new Date()).toString());
}
});
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
32. Sample Application
Goal: Write a cute browser in SWT (under
300 lines) that handles most HTML
CuteBrowser.java uses SWTUtil.java
Run the application on Windows XP
computer that has java installed