1 / 14

Advanced Java Class

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

Download Presentation

Advanced Java Class

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. Advanced Java Class GUI – part 1

  2. 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

  3. 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.

  4. 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)

  5. 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.

  6. 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

  7. 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.

  8. 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

  9. 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.

  10. 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.

  11. Graphics class drawString drawLine drawRect drawPolygon drawArc drawImage fillRect fillPolygon fillArc Graphics class, continued... setColor setFont setXORMode( Color c) gives colors that are an XOR of c and what was already there – fun to play with setPaintMode() just overwrite what’s there – this is the default Methods you can paint with

  12. 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

  13. GUI Task static class ImageDisplayer extends JComponent { private boolean showing = false; private ImageIcon imageIcon = new ImageIcon("images/happy-frog.gif"); private java.util.Timer timer = new java.util.Timer(); public void showImageBriefly() { // fill in to show the image for 1.5 seconds, // and then stop showing it } public void paintComponent(Graphics g) { // fill in to draw a blue rectangle, // and then paint the imageIcon inside of it } }

  14. GUI Task Solution static class ImageDisplayer extends JComponent { private boolean showing = false; private ImageIcon imageIcon = new ImageIcon("images/happy-frog.gif"); private java.util.Timer timer = new java.util.Timer(); public void showImageBriefly() { showing = true; repaint(); timer.schedule(new TimerTask() { public void run() { showing = false; repaint(); } }, 1500); } public void paintComponent(Graphics g) { super.paintComponent(g); if (!showing) { g.setColor(new Color(0,0,255)); g.fillRect(10, 10, imageIcon.getIconWidth()+10, imageIcon.getIconHeight()+10); imageIcon.paintIcon(this, g, 15,15); } } }

More Related