1. Trang chủ
  2. » Giáo Dục - Đào Tạo

1 graphical user interfaces in java tủ tài liệu bách khoa

53 49 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 671,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Elements of a GUIcontainers: rectangular area containing other containers and/or atomic components top-level container: window containing the GUI can be a frame in fact, we can have sev

Trang 1

Graphical User Interfaces in Java

Introduction Elements of a GUI GUI hierarchy of containers and components Blueprint for the definition of a GUI

Tuning the aspect of the GUI Some available containers and atomic components Events created by containers and components Examples: how to use the containers and atomic components Elaborate GUIs (Mode variables, Dynamically evolving GUIs) Examples: elaborate GUIs

References:

http://download.oracle.com/javase/tutorial/

http://download.oracle.com/javase/tutorial/uiswing/

Trang 2

Graphical User Interface:

collection of input / output devices (buttons, …) inserted into one or more windows

these windows and IO devices are displayed on the screen

also, the IO devices react to actions over the keyboard and mouse

two predefined packages:

old package: Abstract Windowing Toolkit (AWT)

new package built over AWT: Swing

always include these imports at the start of your program:

import java.awt.*; import java.awt.event.*;

import javax.swing.*; import javax.swing.event.*;

if you use AffineTransform (see geometric transformations in next chapter),

then include as well:

import java.awt.geom.*;

Trang 3

example: a basic GUI in Java with Swing and AWT

import java.awt.*; import java.awt.event.*;

import javax.swing.*; import javax.swing.event.*;

public class P

{ public static void main(String[] arg)

{ Gui gui = new Gui(); } }

Trang 4

Elements of a GUI

containers:

rectangular area containing other containers and/or atomic components

top-level container: window containing the GUI

can be a frame (in fact, we can have several frames) or an applet

containsacontent pane(special container)andeventually a menu bar

general-purpose container = panel

atomic components:

elaborate input / output device

label (text and/or icon) , tool tip (a component's property) , button (with text and/or icon)menubar , menu , menu item

check box , radio button

text field , text area

combo box , list , file chooser

Trang 5

due to the user manipulating the GUI (button clicked, …)

, a container or atomic component (event source object)

may produce an event object

 in response to this event object

, an event method will be called to process the request of the user

GUI managing thread:

"in parallel" with the thread of the program , the GUI managing thread:

handles the events triggered by the containers and atomic components

 it executes the event methods associated with the events

carries out the painting of the containers and atomic components

Trang 6

GUI hierarchy of containers and atomic components

the top-level container (frame or applet) contains:

♦ eventually, a menu bar (we include it with setJMenuBar() )

♦ always, a content pane (created automatically with the frame or

appletandobtainedwith getContentPane())

the content pane contains:

♦ several panels and/or atomic components

(we include them with add() and remove them with remove() )

each panel contains:

♦ eventually, nothing (reserved area for graphics)

♦ or several panel containers and/or atomic components

(we include them with add() and remove them with remove() )

Trang 7

Blueprint for the definition of a GUI

we describe the Graphical User Interface through the definition of the class Gui:

declare the containers and atomic components as instancevariablesofGui

eventually, if we want to draw graphics in one or several panel or atomic component

, subclass its class and override its paintComponent method

= such subclasses are defined as member classes of Gui

inside the constructor of Gui:

create the containers (including one -or several- frame)

for each frame, do:

frame.setFocusable(true); frame.setVisible(true);

create the atomic components, menu elements and establish their hierarchy (what

contains what)

define event listeners for some containers, atomic components, menu elements

= reflex reactions to some events

= it is ONLY WITHIN these reflex reactions that the containers or atomic components,

the hierarchy of the GUI and the menu can be modified

(add / remove an atomic component, reorganize the GUI, create another frame)

At the end of the constructor, ONCE all the elements of a frame have been defined, we

must enforce the layout:

frame.setSize(new Dimension(width , height)); (enforce a given frame size)

or

frame.pack(); (frame size automatically set to pack up all components)

Trang 8

create the containers, atomic components, menu elements

and build their hierarchy:

frame = new JFrame(); frame.setFocusable(true); frame.setVisible(true);

b1 = new JButton();

frame.getContentPane().add(b1 , …);

define event listeners on some of these containers, atomic components

and menu elements to respond to events triggered by them.

for each frame:

frame.setSize(new Dimension(width , height)); or frame.pack();

}

}

creation of the GUI inside main(): Gui gui= new Gui();

creation of the GUI inside a method of a class:

Trang 9

termination of the program:

reaching the end of main() is not enough to terminate the program!

indeed, the program consists of two threads:

♦ the default thread that executes main()

♦ the GUI managing thread that keeps displaying the GUI

and answering events by executing event methods

 to terminate the program, call System.exit(0); either in main() or in an event method

Trang 10

Tuning the aspect of the GUI

font:

Font font = new Font(name , style , size);

with name = "Serif" (equivalent to "TimesRoman")

or "SansSerif" (equivalent to "Helvetica")

or "Monospaced" (equivalent to "Courier")

style = Font.PLAIN or Font.BOLD or Font.ITALIC

color corresponding to given intensities of red, green, blue:

Color color = new Color( (float ) 0.0 to 1.0

, (float ) 0.0 to 1.0

, (float ) 0.0 to 1.0);

predefined colors (class variables):

Color.black , Color.white

Color.darkGray , Color.gray , Color.lightGray

Color.red , Color.green , Color.blue

Color.orange

Color.pink

Color.yellow

set the background color of a container, atomic component or menu element:

c.setBackground(color); (color behind text)

set the foreground color of a container, atomic component or menu element:

c.setForeground(color); (color of text)

Trang 11

draw a line border around the container or atomic component (single line of a

certain color = Color.black , Color.gray , Color.blue , ):

c.setBorder(BorderFactory.createLineBorder(color));

drawanetchedborderaroundthecontaineroratomic component(thinfurrow):

c.setBorder(BorderFactory.createEtchedBorder());

drawaraisedbevel borderaround the container or atomic component (gives

the illusion that the cont or comp is above the surrounding level):

c.setBorder(BorderFactory.createRaisedBevelBorder());

draw a lowered bevel border around the container or atomic component (gives

the illusion that the cont or comp is below the surrounding level):

c.setBorder(BorderFactory.createLoweredBevelBorder());

icon:

image which is:

♦ loaded from a jpeg or gif file

♦ inserted within a label, a button or a menu item, eventually beside some text

may be either a full scale image or a tiny graphic symbol

(evoking the functionality of the button)

ImageIcon icon = new ImageIcon(filename.jpeg or filename.gif);

 icon is passed as an argument to the constructor

of the label, button or menu item

Trang 12

apart from specifying the imbrications of containers and atomic components (GUI

hierarchy), we must also indicate how elements are arranged inside the containers

= layout of containers and/or atomic components within a given container

after defining all the GUI and all the layouts within the containers, we call:

frame.setSize(new Dimension(width , height));

or frame.pack();

in order in enforce, implement, the global layout of all what the frame contains

BorderLayout is the default layout for a content pane

FlowLayout is the default layout for a panel

Trang 13

BorderLayout = default for content pane

we can lay the containers and/or atomic components in 5 areas:

CENTER (takes as much space as possible)

then, we add the element to a certain area:

c.add(container or atomic component , area);

with area = BorderLayout.CENTER

Trang 14

FlowLayout = default for panel

the containers and/or atomic components are laid from left to right on one row

and if necessary on more than one row:

if we are not satisfied with the default layout of a container:

c.setLayout(new FlowLayout());

or c.setLayout(new FlowLayout(alignment));

or c.setLayout(new FlowLayout(alignment , horizontal_gap, vertical_gap));

with alignment = FlowLayout.LEFT

or FlowLayout.CENTER

or FlowLayout.RIGHT

then, we add the element:

c.add(container or atomic component);

first

element

secondelement

thirdelement

fourthelement

Trang 15

the containers and/or atomic components are laid in a grid of equally sized cases

the grid is filled row after row, from the upper to the lower,

each row being filled from left to right

if we are not satisfied with the default layout of a container:

c.setLayout(new GridLayout(rows , columns));

or

c.setLayout(new GridLayout(rows , columns , horizontal_gap , vertical_gap));

if rows = 0 , the number of rows is adaptive

if columns = 0 , the number of columns is adaptive

(but we CANNOT have simultaneously rows = columns = 0 )

then, we add the element:

c.add(container or atomic component);

firstelement

secondelement

thirdelement

fourthelement

fifthelement

sixthelement

seventhelement

eigthelement

Trang 16

Some available containers and atomic components

frame: JFrame class

a frame is a top-level container which contains

♦ a content pane whose default layout is BorderLayout

(allsubpanelcontainersandatomic componentsarewithinthiscontent pane)

♦ eventually a menu bar

create the frame object: frame = new JFrame();

then, always do: frame.setFocusable(true); frame.setVisible(true);

eventually, set the title: frame.setTitle(title);

eventually, set the location of the frame on the screen: frame.setLocation(x , y);

eventually, attach a menu bar: frame.setJMenuBar(menu_bar);

hide a previously visible frame: frame.setVisible(false);

add to or remove from the content pane a panel or an atomic component:

frame.getContentPane().add(panel or atomic comp.); (if not BorderLayout) frame.getContentPane().add(panel or atomic comp , area); (if BorderLayout)

frame.getContentPane().remove(cont or comp.);

frame.getContentPane().removeAll();

when all has been added to the frame (at the end of the constructor Gui() , enforce the

layoutwithintheframe with:

frame.setSize(new Dimension(width , height)); (enforce frame size)

or

frame.pack(); (frame size automatically set to pack up all components)

if we want content pane of size w , h  w + 16 , h + 38 or, if menu bar: w + 16 , h + 60

after you have added or removed dynamically (inside an event method)

an element of the GUI, you should do: f.validate(); f.repaint();

Trang 17

panel: JPanel class

a panel is a common container whose default layout is FlowLayout

it may contain atomic components and/or other panels or just serve for graphics

create the panel object: panel = new JPanel();

add to or remove from the panel another panel or an atomic component:

panel.add(panel or atomic comp.); (if not BorderLayout)

panel.add(panel or atomic comp , area); (if BorderLayout)

panel.remove(panel or comp.);

panel.removeAll();

eventually, set the size of the panel:

panel.setPreferredSize(new Dimension(width , height));

in fact, just a wish that may not be strictly followed by the layout manager

Trang 18

label: JLabel class

a label is a rectangular area which contains a string text and/or an icon:

create the label object: label = new JLabel();

set the text and/or the icon: label.setText(text);

Trang 19

tool tip:

a tool tip is a small and transient message about a container or atomic component

it appears for a few seconds when the mouse cursor stays motionless

on the container or atomic component

no need to create an object representing the tool tip

just apply setToolTipText method on the existing cont or comp object:

c.setToolTipText(text);

BIG QUESTION

label about the big question

Trang 20

button: JButton class

a button is a rectangular area that, if clicked, creates an event object

a button can contain a string text and/or an icon, like a label:

create the button object: button = new JButton();

set the font of the button: button.setFont(font);

set the text and/or the icon: button.setText(text);

Trang 21

menu bar and menus: JMenuBar , JMenu , JMenuItem classes

the menu bar contains several menus

each of these menus is folded by default, but unfolds when we click it

each menu , when unfolded, contains

♦ some menu items (sorts of buttons)

♦ eventually some separators between them

♦ eventually other (sub)menus

a menu item, ifselected,createsaneventobject

create the menu bar object: menu_bar = new JMenuBar();

add the menu bar to a frame (or applet): frame.setJMenuBar(menu_bar);

create a menu object: menu = new JMenu();

menu bar

folded menu

unfolded sub menu

first menu second menu third menu

menu item n.0 menu item n.1 menu item n.2 sub menu n.3 menu item n.4

menu item n.0 menu item n.1 menu item n.2

unfolded menu

sub menu n.5folded sub menu

separator

Trang 22

create a menu item object: menu_item = new JMenuItem();

set the text and/or the icon of the menu item: menu_item.setText(text);

add to or remove from the menu amenuitem,aseparatororanothermenu

(the elements are piled up in the order in which they are added):

Trang 23

check boxes: JCheckBox class

any number of check boxes in a group can be selected at a given time

first, create a panel panel with grid layout policy (any number of rows, 1 column)

for each of the check boxes ci:

Trang 24

radio buttons: JRadioButton class

at most one button at a time can be selected

first, create a panel with grid layout policy (any number of rows, 1 column)

for each of the radio buttons ri:

ri = new JRadioButton();

ri.setText(text); eventually: ri.setIcon(icon);

ri.setSelected(true or false);

p.add(ri);

initially, we should select either no button or just one button

(if we select more than one button, then only the first one will actually be selected)

Then, group all radio buttons ri into a group of type ButtonGroup:

g = new ButtonGroup(); g.add(r1); g.add(rn);

the current state of radio button ri is returned by ri.isSelected()

Yiltan Mehmet Fatma

Trang 25

text field: JTextField class

one editable line of text at the end of which we type Return

typing Return will trigger an event

Return will NOT be represented by a newline character at the end of the string text

create the textfield object:

textfield = new JTextField();

or

textfield = new JTextField(desired number of characters);

set the font of the text field: textfield.setFont(font);

eventually, set an initial text: textfield.setText(text);

obtain the modified text: textfield.getText() returns the current text

select all the text: textfield.selectAll();

this is a line of text currently edited

Trang 26

text area: JTextArea class

several editable lines of text in a rectangular area

corresponding to a certain number of rows and of columns

line wrapping: when we arrive at the end of a row

, the text line is wrapped onto the next row

create the textarea object:

textarea = new JTextArea( desired number of rows , desired number of columns);

set the font of the text area: textarea.setFont(font);

turn line wrapping on: textarea.setLineWrap(true);

enforce wrap between words: textarea.setWrapStyleWord(true);

eventually, set an initial text: textarea.setText( row 1 string

+ row 2 string

+ ….

+ row n string );

obtain the modified text: textarea.getText() returns the current text

select all the text: textarea.selectAll();

This is a full text currently edited; the number of rows

is 4 and the number of columns is 29

Ngày đăng: 09/11/2019, 08:55

TỪ KHÓA LIÊN QUAN

w