Implementing GUIs in Java - PowerPoint PPT Presentation

About This Presentation
Title:

Implementing GUIs in Java

Description:

Changing Background Color. import java.awt.*; import javax. ... Tweaking Layouts. Some layout constructors allow hgap and vgap, integers specifying the number of ... – PowerPoint PPT presentation

Number of Views:147
Avg rating:3.0/5.0
Slides: 41
Provided by: dUmn
Learn more at: https://www.d.umn.edu
Category:

less

Transcript and Presenter's Notes

Title: Implementing GUIs in Java


1
Implementing GUIs in Java
  • The Java Foundation Classes (JFC) are a set of
    packages encompassing the following APIs
  • Abstract Window Toolkit (AWT) native GUI
    components
  • Swing lightweight GUI components
  • 2D rendering two-dimensional shapes, text, and
    images
  • Accessibility allowing compatibility with, for
    example, screen readers and screen magnifiers

2
Abstract Window Toolkit (AWT)
  • Provides basic UI components
  • Buttons, lists, menus, textfields, etc
  • Event handling mechanism
  • Clipboard and data transfer
  • Image manipulation
  • Font manipulation
  • Graphics
  • Platform independence is achieved through peers,
    or native GUI components

3
AWT Packages
java.awt Basic component
functionality java.awt.accessibility Assistive
technologies java.awt.color Colors and
color spaces java.awt.datatransfer Clipboard and
data transfer support java.awt.dnd Drag
and drop java.awt.event Event classes and
listeners java.awt.font 2D API font
package java.awt.geom 2D API geometry
package java.awt.im Input
methods java.awt.image Fundamental image
manipulation classes java.awt.peer Peer
interfaces for component peers java.awt.print
2D API support for printing java.awt.swing
Swing components
4
Peers and Platform Independence
  • The first AWT (Java 1.0) was rolled out in an
    incredible 6 weeks using peers
  • Thus an AWT menu on the Solaris platform, for
    example, actually creates a Motif menu object as
    its peer
  • UI components that have peers are called
    heavyweight because
  • they are rendered in their own (opaque) windows
    and thus are expensive to use,
  • they must be rectangular and cannot have
    transparent backgrounds, and
  • they are not amenable to being subclassed

5
Using Peers
Java Program
Java AWT
Native Window System Peers
A Java program creates and displays an AWT
component, which creates and displays a native
component, or peer.
6
Lightweight Components
  • AWT 1.1 introduced the notion of lightweight
    components which
  • are contained within a heavyweight component's
    window
  • do not have peers
  • are rendered in their container's window rather
    than one of their own
  • do not incur performance penalties and can have
    transparent backgrounds
  • Almost all Swing components are lightweight ones
    that extend either java.awt.Component or
    java.awt.Container

7
Some AWT Components
Object
Component
Container
Button
List
Scrollbar
JComponent
Label
Canvas
Button
8
AWT vs. Swing
  • Swing does not replace the AWT it is built on
    top of it
  • All 1.0 AWT components are heavyweight
    corresponding Swing components are lightweight
  • Swing component names begin with J''
  • Component (AWT) vs. JComponent (Swing)
  • Button (AWT) vs. JButton (Swing)
  • Always use Swing components however, since Swing
    is built on top of AWT, you will need to know
    some AWT methods

9
Some Swing Components
JComponent
AbstractButton
JLabel
JButton
JMenuItem
JList
JToggleButton
JScrollBar
JCheckBox
JFileChooser
10
JComponents
  • Note that JComponents are containers
  • JComponents do not extend their AWT counterparts
  • For example, the JButton class is not a subclass
    (direct or indirect) of Button
  • However, some Swing components are not
    JComponents
  • For example, some Swing containers are direct
    subclasses of their AWT counterparts

11
Some AWT Containers
Container
JComponent
Panel
ScrollPane
Window
Applet
Dialog
Frame
12
Swing Components That Are Not JComponents (in red)
Container
JComponent
Panel
ScrollPane
Window
Applet
Dialog
Frame
JWindow
JDialog
JFrame
JApplet
13
Some More Swing Components That Are JComponents
JComponent
JLayeredPane
JPanel
JScrollPane
JDesktopPane
JInternalFrame
JTable
JTree
14
Some AWT Component Methods
  • void setBackground(Color c)
  • void setForeground(Color c)
  • void setEnabled(boolean b)
  • void setVisible(boolean b)
  • void setFont(Font f)
  • void setSize(Dimension d)
  • void setLocation(int x, int y)

All but setSize and setLocation are overridden
by the JComponent class.
15
Example A Simple Framed Window
import java.awt. import javax.swing. public
class SwingTest public static void
main(String args) JFrame frame new
JFrame("Test Frame") frame.setSize(new
Dimension(300,200)) frame.setLocation(100
,100) frame.setVisible(true)
16
Notes on the Example
  • setSize and setLocation require java.awt. the
    rest require javax.swing.
  • The JFrame constructor argument is used as a
    title
  • The Dimension constructor takes an integer width
    and height, respectively
  • The setLocation method takes a pair of integer
    coordinates (x,y) where (0,0) is the upper left
    corner of the display
  • The visibility of a JFrame is set to false by
    default

17
Example Output Display
  • This window was managed by the K Desktop
    Environment (KDE)
  • Clicking the Close button (X) will cause the
    display to be hidden, but the program will
    continue since no listeners are set up yet
  • Can use ctl-C to kill the Java Virtual Machine

18
Adding Color
The java.awt.Color class has the following
static fields (data members)
  • Color.black
  • Color.blue
  • Color.cyan
  • Color.darkGray
  • Color.gray
  • Color.green
  • Color.lightGray
  • Color.magenta
  • Color.orange
  • Color.pink
  • Color.red
  • Color.white
  • Color.yellow

19
Changing Background Color
import java.awt. import javax.swing. public
class SwingTest public static void
main(String args) JFrame frame new
JFrame("Test Frame") frame.setSize(new
Dimension(300,200)) frame.setLocation(100
,100) Container contentPane
frame.getContentPane()
contentPane.setBackground(Color.red)
frame.setVisible(true)
20
Content Panes
  • Q Why not just frame.setBackground(Color.red)
    ?
  • A In order to be lightweight, Swing's top-level
    window objects must be built on top of a
    lightweight AWT Container object introduced in
    version 1.1
  • This container is called a content pane
  • Swing top-level window classes
  • JWindow
  • JFrame
  • JApplet
  • JDialog
  • JInternalFrame

21
Adding a Label and Button
import java.awt. import javax.swing. public
class SwingTest public static void
main(String args) JFrame frame new
JFrame("Test Frame") frame.setSize(new
Dimension(300,200)) frame.setLocation(100
,100) Container contentPane
frame.getContentPane() JLabel label
new JLabel("HERE IS A LABEL")
contentPane.add(label, BorderLayout.NORTH)
JButton button new JButton("BUTTON")
contentPane.add(button, BorderLayout.SOUTH)
frame.setVisible(true)
22
New Display
Resized
23
Notes on the Code
  • Since the frame is a top-level Swing window,
    components must be added to its content pane
  • When components are added to a container, how
    they are placed is dependent upon the container's
    layout manager
  • The default layout manager for a JFrame is a
    BorderLayout manager (described later)
  • When adding to a container whose layout manager
    is BorderLayout, the second parameter should be a
    location defined in the BorderLayout class

24
Adding a List of Options
import java.awt. import javax.swing. public
class SwingTest public static void
main(String args) JFrame frame new
JFrame("Test Frame") frame.setSize(new
Dimension(300,200)) frame.setLocation(100
,100) Container contentPane
frame.getContentPane() JLabel label
new JLabel("HERE IS A LABEL")
contentPane.add(label, BorderLayout.NORTH)
JButton button new JButton("BUTTON")
contentPane.add(button, BorderLayout.SOUTH)
String options "Option 1", "Option 2",
"Option 3"
JList list new JList(options)
contentPane.add(list, BorderLayout.CENTER)
frame.setVisible(true)
25
New Display
Note that "Option 3" has been selected.
26
Adding a Check Box and Slider
public class SwingTest public static void
main(String args) JFrame frame new
JFrame("Test Frame") frame.setSize(new
Dimension(400,200)) frame.setLocation(100
,100) Container contentPane
frame.getContentPane() JLabel label
new JLabel("HERE IS A LABEL")
contentPane.add(label, BorderLayout.NORTH)
JButton button new JButton("BUTTON")
contentPane.add(button, BorderLayout.SOUTH)
String options "Option 1", "Option 2",
"Option 3" JList list new
JList(options) contentPane.add(list,
BorderLayout.CENTER) JCheckBox cbox
new JCheckBox("Check")
contentPane.add(cbox, BorderLayout.WEST)
JSlider slider new JSlider()
contentPane.add(slider, BorderLayout.EAST)
frame.setVisible(true)
27
New Display
28
Layout Management
  • A layout manager determines the location and size
    of components placed into a container
  • Different layout managers use different
    algorithms for determining size and location
  • BorderLayout places at compass locations and
    center
  • FlowLayout places components in rows, left to
    right
  • GridLayout places in rectangular grid
  • BoxLayout places in a single row or column

29
Changing the Layout
public class SwingTest public static void
main(String args) JFrame frame new
JFrame("Test Frame") frame.setSize(new
Dimension(300,200)) frame.setLocation(100
,100) Container contentPane
frame.getContentPane()
contentPane.setLayout(new FlowLayout())
JLabel label new JLabel("HERE IS A LABEL")
JButton button new JButton("BUTTON")
String options "Option 1", "Option 2",
"Option 3" JList list new
JList(options) JCheckBox cbox new
JCheckBox("Check") JSlider slider new
JSlider() contentPane.add(label)
contentPane.add(button)
contentPane.add(list) contentPane.add(cbo
x) contentPane.add(slider)
frame.setVisible(true)
30
New Display
Resized
31
Default Layout Managers
  • The default layout manager for content panes is
    BorderLayout. Recall that the following Swing
    components have content panes
  • JWindow
  • JFrame
  • JDialog
  • JApplet
  • JInternalFrame
  • The other Swing container is the JPanel, whose
    default layout manager is FlowLayout.

32
JPanels
  • A JPanel object can be used for grouping
    components into a container, which can then be
    added to another container
  • The JPanel constructor with no arguments creates
    a panel with a FlowLayout manager
  • Another JPanel constructor takes any layout
    manager as an argument
  • A JPanel can also be used a a blank area for
    drawing custom graphics

33
JPanel Example
JFrame frame new JFrame("Test Frame")
frame.setSize(new Dimension(300,200))
frame.setLocation(100,100) Container
contentPane frame.getContentPane()
JLabel label new JLabel("HERE ARE SOME
BUTTONS",
SwingConstants.CENTER) JButton button1
new JButton("BUTTON1") JButton button2
new JButton("BUTTON2") JButton button3
new JButton("BUTTON3") JPanel
panel new JPanel() panel.add(button1)
panel.add(button2)
panel.add(button3) contentPane.add(label
, BorderLayout.NORTH) contentPane.add(pan
el, BorderLayout.CENTER)
frame.setVisible(true)
34
JPanel Example Output
Note use of SwingConstants.CENTER argument in
JLabel constructor.
35
Changing JPanel Layout
JFrame frame new JFrame("Test Frame")
frame.setSize(new Dimension(300,200))
frame.setLocation(100,100) Container
contentPane frame.getContentPane()
JLabel label new JLabel("HERE ARE SOME
BUTTONS",
SwingConstants.CENTER) JButton button1
new JButton("BUTTON1") JButton button2
new JButton("BUTTON2") JButton button3
new JButton("BUTTON3") JPanel
panel new JPanel() panel.setLayout
(new BoxLayout(panel, BoxLayout.Y_AXIS))
panel.add(button1)
panel.add(button2) panel.add(button3)
contentPane.add(label, BorderLayout.NORTH)
contentPane.add(panel,
BorderLayout.CENTER) frame.setVisible(tr
ue)
36
New Output
  • The button panel is to the west because no other
    component was placed there
  • The BoxLayout constructor requires both the
    component being laid out and either
  • BoxLayout.X_AXIS
  • BoxLayout.Y_AXIS

37
Tweaking Layouts
  • Some layout constructors allow hgap and vgap,
    integers specifying the number of pixels
    separating components horizontally and vertically
  • FlowLayout allows the specification of whether
    the line of components should be left-justified,
    right-justified, or centered

new FlowLayout(int align) new FlowLayout(int
align, int hgap, int vgap) new BorderLayout(int
hgap, int vgap) new GridLayout(int rows, int
cols) new GridLayout(int rows, int cols,
int hgap, int vgap)
38
Tweaking Example
JFrame frame new JFrame("Test Frame")
frame.setSize(new Dimension(300,200))
frame.setLocation(100,100) Container
contentPane frame.getContentPane()
LayoutManager lm contentPane.getLayout()
((BorderLayout)lm).setHgap(25) JLabel
label new JLabel("HERE ARE SOME BUTTONS",
SwingConstants.CENTER)
JButton button1 new
JButton("BUTTON1") JButton button2 new
JButton("BUTTON2") JButton button3 new
JButton("BUTTON3") JPanel panel
new JPanel() panel.setLayout(new
BoxLayout(panel, BoxLayout.Y_AXIS))
panel.add(button1) panel.add(button2)
panel.add(button3)
contentPane.add(label, BorderLayout.NORTH)
contentPane.add(panel, BorderLayout.CENTER)
frame.setVisible(true)
39
Tweaking Example Output
  • The LayoutManager returned by getLayout() is an
    interface type that the BorderLayout class
    implements
  • The setHgap method we want is in the BorderLayout
    class
  • So we must cast the LayoutManager to BorderLayout
    in order to use setHgap

40
Sizing Hints
  • Layout managers often need to resize their
    components to make things fit
  • For example, the widths and heights of components
    in a BoxLayout are adjusted according to both
    preferred and maximum heights and widths
  • If you don't like the size of the components a
    layout manager comes up with, you may have to
    give sizing hints using the following methods
    from the JComponent class
  • void setMinimumSize(Dimension d)
  • void setPreferredSize(Dimension d)
  • void setMaximumSize(Dimension d)
Write a Comment
User Comments (0)
About PowerShow.com