Advanced Java Class GUI – part 1
Intro to GUI • GUI = Graphical User Interface -- “Gooey” • Just because it’s “gooey” does not mean you may write messy code. – GUI is the “view layer”, and it should be separated from the controller and model layers. • AWT = Abstract Windowing Toolkit • Swing = better versions of AWT classes
GUI terminology • Components = buttons, text fields, frames, dialog boxes, scrollbars, popup menus, scrollable lists, etc. • Containers = things that hold Components. A container is also a component. Examples: Panel, Window. • LayoutManagers arrange Components inside of Containers. • Use Graphics objects to draw directly onto a component. This can draw shapes, text, images, etc. • “Painting” is when a component is drawn onto the screen. • Events occur when a user clicks the mouse, types on the keyboard, types in a text field, or selects an item from a list. • Listeners (or adapters) handle events, and are specific to a certain type of event.
A few important GUI packages • AWT (java.awt and subpackages) – AWT Events (java.awt.event) – Java2D (java.awt.geom) • Swing (javax.swing and subpackages) – Swing Events (javax.swing.event)
Swing vs. AWT • Don’t mix AWT with Swing, and always use Swing if available AWT was original GUI API – quite limited! • – not very platform independent – you must do double-buffering yourself – native windows consume a lot of system resources Swing is built on AWT, and is a big improvement • – mostly light-weight classes – 100% pure java = platform independent, because it doesn’t depend on native code – pluggable look and feel allows the program to reflect the platform it’s currently running on – double buffers automatically • Note that Swing components start with “J”. – “Frame” refers to the old AWT class. – “JFrame” refers to the new Swing class.
Swing Components • common swing components: see figure 6- 3, p 393-396 • MVC layers – The model layer is a separate class, which may be shared by multiple Swing components – The Controller and View layers of a component are not separated, because of the nature of GUI components – the view is the controller! – See figure 6-4 on page 397 & 398
Layout Managers • LayoutManagers arrange components within Containers. • They account for things that you cannot know at compile time, like differing screen resolutions, platform differences, fonts, etc. • Containers are components, and child containers can have a LayoutManger that is different from their parent’s.
Using LayoutManagers • Create a new Container. It has a default LayoutManager, which you can override by calling the setLayout method on it. • LayoutManager classes: – BorderLayout – BoxLayout – CardLayout – FlowLayout – GridBagLayout – GridLayout
Layout Paradigms • BorderLayout: North, South, East, West, and Center. figures 6-12 & 6-13 • FlowLayout: lines the components up horizontally from left to right. Can specifiy justification; default is center. fig. 6-14 • GridLayout: has columns and rows. components are added left to right and top to bottom, like a text editor. figure 6-15 • GridbagLayout: more flexible than GridLayout – components can be added to any cell, and can span multiple rows and columns. figure 6-16 • CardLayout: imagine a deck of cards – only one component is visible at a time. • BoxLayout: components are in a single-file line, which can be horizontal or vertical. figure 6-17 • Note: the above figures are in a JTabbedPane, which does it’s own LayoutManaging.
Painting • You can override a Swing component’s paintComponent method if you don’t want to use the component’s default appearance. Call super.paintComponent (unless you want transparency). • Call repaint() when you want to explicitly refresh what the user is seeing. • You can also override update() if you want close control over the refreshing of a part of the component’s appearance.
Methods you can paint with • Graphics class • Graphics class, continued... – drawString – setColor – drawLine – setFont – drawRect – drawPolygon – setXORMode( Color c) – drawArc • gives colors that are an – drawImage XOR of c and what was – fillRect already there – fun to play – fillPolygon with – fillArc – setPaintMode() • just overwrite what’s there – this is the default
Java 2D • Parts of API – Graphics2D class in java.awt – java.awt.geom – java.awt.font – java.awt.image • Advantages over Graphics class – antialiasing smooths edges – can fill with contents other than a solid color – can use any system font – printing is easier (see chapter 7) – can paint any shape you want, not just predefined ones – “Strokes” – any width, and varying patterns (dashed, etc.) – can squish, stretch, rotate, etc. anything you draw
Recommend
More recommend