Microsoft PowerPoint - course8.ppt

Similar documents
Microsoft PowerPoint ppt

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes

Swing-02.pdf

PowerPoint 簡報

Microsoft PowerPoint - ch6 [相容模式]

(CIP) Web /,. :, ISBN X.W T P393.4 CIP (2004) Web ( ) ( / ) : * 787


untitled

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D>

新・解きながら学ぶJava

Chapter 9: Objects and Classes

java2d-4.PDF

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

epub83-1

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Chapter 9: Objects and Classes

基于CDIO一体化理念的课程教学大纲设计

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D>

Microsoft Word - Broker.doc

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

D C 93 2

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

第1章

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

INTRODUCTION TO COM.DOC

epub 94-3

untitled

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

ZW1.PDF

mvc

Microsoft PowerPoint - ch02

Microsoft Word - ch04三校.doc

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

EJB-Programming-4-cn.doc

Windows XP

第1章

Microsoft Word - 01.DOC

K7VT2_QIG_v3

Microsoft Word - 第3章.doc

untitled

Microsoft Word - template.doc

untitled

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

untitled

Learning Java

JavaIO.PDF

javaexample-02.pdf

VB程序设计教程

E3. 最 大 公 因 數 問 題 描 述 : 寫 一 程 式 求 兩 數 之 最 大 公 因 數 利 用 TextField 元 件 輸 入 正 整 數 M, N (1 N M 9999), 按 下 compute 按 鈕 後 計 算 正 整 數 M, N 的 最 大 公 因 數, 並 顯 示 於

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4];

JBuilder Weblogic

WWW PHP

untitled

麻 省 理 工 學 院 是 在 西 元 2013 年 12 月 3 日 推 出 MIT App Inventor 2 網 站, 提 供 免 費 的 雲 端 服 務, 使 用 者 可 以 透 過 瀏 覽 器 來 開 發 Android 裝 置 應 用 程 式, 該 網 站 的 網 址 為 : http

EJB-Programming-3.PDF

影視後製全攻略 Premiere Pro After Effects Encore 自序 Adobe Premiere Pro After Effects Encore 2008 Adobe CS Adobe CS5 Adobe CS4 Premiere Pro After Effect

Java

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

untitled

ebook 86-15

Java 1 Java String Date

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

ebook

[ 13 年 12 月 06 日, 下 午 6 点 24 分 ] Intel Hosts 新 加 入 的 同 学 们, 快 去 听 听 在 线 宣 讲 会 哦, 同 时 完 成 页 面 下 方 有 奖 调 查, 就 有 资 格 参 与 大 奖 抽 取 啦! [ 13 年 12 月 06 日, 下 午

untitled

MATLAB介紹

Microsoft Word - 正文.doc

CC213

Topic

Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10

图形用户界面 (GUI) 设计

2 Java 语 言 程 序 设 计 教 程 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

授课内容 内容 图形界面与控制台应用的区别 (Console Application) 第 6 章图形用户界面图形用户界面 (Graphical User Interface,GUI), 使用图形方式借助菜单 按钮等标准界面元素和键盘 鼠标操作, 实现人机交互 内容和要求 : 掌握 Java Swi

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

untitled

SDS 1.3

WinMDI 28

untitled

Microsoft PowerPoint - 18_Event.pptx

基于ECO的UML模型驱动的数据库应用开发1.doc

02

ebook111-4

App Flappy Bird 14 STEP Swift GameKit Xcode 5.1 Swift GameKit MyWord

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

附录J:Eclipse教程

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Microsoft Word - Java全文.doc

概述

(京)新登字063号

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

提纲 1 2 OS Examples for 3

epub 61-2

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

Transcription:

回顧 Java 程式設計基礎班 (8) Java Data Structure 劉根豪台大電機所網路資料庫研究室 Email: kenliu@arbor.ee.ntu.edu.tw 1 2 Java AWT package Java Swing package Component: 一些 GUI 元件, 如 :Button Label 等 Container: 用來放置 GUI 元件的地方 Container 可分為兩種供使用者使用 : Frame(Window): 一個開出來的視窗 Panel: 放在 Frame 裡的畫布, 一個 Frame 裡可以有多個 Panel 修改自 awt 提供更強大的繪圖元件功能, 以及更穩定的函式庫 Swing Container 可分為兩種供使用者使用 : JFrame(Window): 一個開出來的視窗 JPanel: 放在 JFrame 裡的畫布, 一個 JFrame 裡可以有多個 JPanel 3 4 第一個小程式 JFrame 的使用 JPanel 的使用 見 exercise8_1 見 exercise8_2 5 6 1

Layout Managers 把元件放在我們希望放置的地方! FlowLayout:Panel 與 Applet 預設使用的 layout 方式 BorderLayout:Windows Dialogs 與 Frames 的預設使用的 layout 方式 GridLayout CardLayout GridBagLayout Null 不設定任何 Layout FlowLayout Manager ㄧ行接著一行 就是說元件一個接著一個的放在上面, 放滿了就會換行, 有點像打字超過一行字數會自動換行般 7 8 public class MyFlow private JFrame f; private JButton btn1, btn2, btn3; public static void main( String args[] ) MyFlow aflow = new MyFlow(); aflow.go(); public void go() f = new JFrame( "FlowLayout Manager" ); // 使用 FlowLayout Manager, 對齊方式靠左,default 對齊方式為置中 f.setlayout( new FlowLayout( FlowLayout.LEFT ) ); btn1 = new JButton( "Button1" ); // 產生三個按鈕 btn2 = new JButton( "Button2" ); btn3 = new JButton( "Button3" ); f.add( btn1 ); // 把 Button 加到 Frame 上 f.add( btn2 ); f.add( btn3 ); f.setsize( 100, 100 ); f.setvisible( true ); 9 10 BorderLayout Manager BorderLayout 包含五種不同區域 : North,South,Ease,West,Center 元件的相對位置不會隨 window size 的改變而改變, 但元件的 size 將可能改變 看個例子 : public class MyBorder private JFrame f; private JButton btnnorth, btnsouth, btneast, btnwest, btncenter; public static void main( String args[] ) MyBorder aborder = new MyBorder(); aborder.go(); [ next ] 11 12 2

public void go() f = new JFrame( "BorderLayout Manager" ); //Frame 預設使用 BorderLayout f.setlayout( new BorderLayout() ); // 採用 BorderLayout 的方式來排列元件 btnnorth = new JButton( "ButtonNorth" ); btnsouth = new JButton( "ButtonSouth" ); btneast = new JButton( "ButtonEast" ); btnwest = new JButton( "ButtonWest" ); btncenter = new JButton( "ButtonCenter"); f.add( btnnorth, BorderLayout.NORTH ); // 將五個按鈕分別加在五個位置上 f.add( btnsouth, BorderLayout.SOUTH ); f.add( btneast, BorderLayout.EAST ); f.add( btnwest, BorderLayout.WEST ); f.add( btncenter, BorderLayout.CENTER ); f.setsize( 300, 100 ); f.setvisible( true ); 13 14 GridLayout Manager 讓你在畫布上打格子, 元件就可以方便的放在特定的位置裡, 每個方格的大小是一樣的 加入順序 : 由左至右 / 由上至下 看個例子 : public class MyGrid private JFrame f; private JButton btn11, btn12, btn13; private JButton btn21, btn22, btn23; public static void main( String args[] ) MyGrid agrid = new MyGrid(); agrid.go(); public void go() f = new JFrame( "GridLayout Manager" ); // 使用 GridLayout 方式排列元件 // 將 Frame 分成 row=3, col=2 的區塊 f.setlayout( new GridLayout( 3, 2 ) ); 15 [ next ] 16 btn11 = new JButton( "Button(1,1)" ); btn12 = new JButton( "Button(1,2)" ); btn13 = new JButton( "Button(1,3)" ); btn21 = new JButton( "Button(2,1)" ); btn22 = new JButton( "Button(2,2)" ); btn23 = new JButton( "Button(2,3)" ); // 將入六個按鈕, 加入順序 : 由左至右 / 由上至下 f.add( btn11 ); f.add( btn12 ); f.add( btn13 ); f.add( btn21 ); f.add( btn22 ); f.add( btn23 ); f.setsize( 300, 200 ); f.setvisible( true ); 17 18 3

AWT/Swing Component Library Label 19 20 public class mylabel extends JFrame public static void main( String args[] ) mylabel labelexam = new mylabel( "Label Example" ); JLabel label1 = new JLabel( "Sample" ); p.add( label1 ); labelexam.add( p ); labelexam.setsize( 100, 100 ); labelexam.setvisible( true ); public mylabel( String title ) super (title); 21 22 Button public class mybutton extends JFrame public static void main( String args[] ) mybutton btnexam = new mybutton( "Button Example" ); JButton btn1 = new JButton( "Sample" ); p.add( btn1 ); btnexam.add( p ); btnexam.setsize( 100, 100 ); btnexam.setvisible( true ); public mybutton( String title ) super (title); 23 24 4

Checkbox public class mycheckbox extends Frame public static void main( String args[] ) mycheckbox chkboxexam = new mycheckbox( "CheckBox Example" ); JCheckbox chkbox1 = new JCheckbox( "One", false ); JCheckbox chkbox2 = new JCheckbox( "Two", false ); JCheckbox chkbox3 = new JCheckbox( "Three", true ); p.add( chkbox1 ); p.add( chkbox2 ); p.add( chkbox3 ); chkboxexam.add( p ); chkboxexam.setsize( 300, 100 ); chkboxexam.setvisible( true ); public mycheckbox( String title ) super (title); 25 26 CheckboxGroup - Radio Button true 27 28 public class mycheckboxgroup extends JFrame public static void main( String args[] ) mycheckboxgroup radiobtnexam = new mycheckboxgroup("checkbox Example"); JRadioButton radiobtn1 = new JRadioButton( "One"); JRadioButton radiobtn2 = new JRadioButton( "Two"); JRadioButton radiobtn3 = new JRadioButton( "Three"); ButtonGroup bg = new ButtonGroup(); bg.add(radiobtn1); bg.add(radiobtn2); bg.add(radiobtn3); p.add( radiobtn1 ); p.add( radiobtn2 ); p.add( radiobtn3 ); radiobtnexam.add( p ); radiobtnexam.setsize( 3100, 100 ); radiobtnexam.setvisible( true ); public mycheckboxgroup( String title ) super (title); 29 30 5

Choice:"select one from this list" public class mychoice extends JFrame public static void main( String args[] ) mychoice choiceexam = new mychoice( "Choice Example" ); String[] items = First, Second, Three ; JComboBox c = new JComboBox(items); p.add( c ); choiceexam.add( p ); choiceexam.setsize( 100, 100 ); choiceexam.setvisible( true ); public mychoice( String title ) super (title); 31 32 List 33 34 public class mylist extends JFrame public static void main( String args[] ) mylist listexam = new mylist( "List Example" ); String[] items = First, Second, Third ; JList c = new JList( items); p.add( c ); listexam.add( p ); listexam.setsize( 100, 100 ); listexam.setvisible( true ); public mylist( String title ) super (title); 35 36 6

TextField public class mytextfield extends JFrame public static void main( String args[] ) mytextfield txtfieldexam = new mytextfield( "TextField Example" ); JTextField txtfield1 = new JTextField( "Sample", 20 ); p.add( txtfield1 ); txtfieldexam.add( p ); txtfieldexam.setsize( 100, 100 ); txtfieldexam.setvisible( true ); public mytextfield( String title ) super (title); 37 38 TextArea 39 40 public class mytextarea extends JFrame public static void main( String args[] ) mytextarea txtareaexam = new mytextarea( "TextArea Example" ); JTextArea txtarea1 = new JTextArea( "Sample", 4, 20 ); p.add( txtarea1 ); txtareaexam.add( p ); txtareaexam.setsize( 100, 100 ); txtareaexam.setvisible( true ); public mytextarea( String title ) super (title); 41 42 7

Dialog public class mydialog extends JFrame public static void main( String args[] ) mydialog dialogexam = new mydialog( "Dialog Example" ); JDialog dialog1 = new JDialog( dialogexam, "Sample", false ); dialog1.add( new Label( "Hello, Dialog..." ), BorderLayout.CENTER ); dialog1.pack(); dialog1.setvisible( true ); dialogexam.setsize( 100, 100 ); dialogexam.setvisible( true ); public mydialog( String title ) super (title); 43 44 FileDialog 45 46 public class myfiledialog extends JFrame public static void main( String args[] ) myfiledialog fdialogexam = new myfiledialog( "FileDialog Example" ); String fname= ; JFileChooser chooser = new JFileChooser(); int returnval = chooser.showopendialog(parent); if(returnval == JFileChooser.APPROVE_OPTION) fname = chooser.getselectedfile().getname(); Label l1 = new Label( fname ); p.add( l1 ); fdialogexam.add( p ); fdialogexam.setsize( 100, 100 ); fdialogexam.setvisible( true ); public myfiledialog( String title ) super (title); 47 48 8

MenuBar Menu MenuItem public class mymenu extends JFrame public static void main( String args[] ) mymenu menuexam = new mymenu( "Menu Bar/Menu/Menu Item" ); JMenuBar mb = new JMenuBar(); JMenu m1 = new JMenu( "File" ); JMenu m2 = new JMenu( "Edit" ); mb.add( m1 ); mb.add( m2 ); JMenuItem m1_open = new JMenuItem( "Open" ); JMenuItem m1_save = new JMenuItem( "Save" ); JMenuItem m1_exit = new JMenuItem( Exit" ); m1.add( m1_open ); m1.add( m1_save ); m1.addseparator(); m1.add( m1_exit ); menuexam.setjmenubar( mb ); menuexam.setsize( 100, 100 ); menuexam.setvisible( true ); 49 public mymenu( String title ) super (title); 50 import java.awt.event.*; public class mypopupmenu extends JFrame implements ActionListener private JButton b; private JPopupMenu pop1; public static void main( String args[] ) mypopupmenu popexam = new mypopupmenu( "PopupMenu Example" ); popexam.setsize( 100, 100 ); popexam.setvisible( true ); [ next page ] 51 52 事件處理函式 GUI Controls 和 Listeners GUI 事件驅動模型 GUI 事件發生時再通知我 包括移動滑鼠 按鍵或輸入資料等等 java.awt.awtevent 三要素 Source Buttons 等 GUI 控制 Listener 想要知道控制何時被操作的物件 通知訊息 訊息從 Source 送到 Listener 來當作事件已經發生的通知 註冊 Callback 函式 53 54 9

Listeners 和 Interface java.awt.awtevent 物件可能對多個事件有興趣 實現多重 listener 介面 一旦物件實現 listener 介面就可以被加到 source source.addlistener(listener l) 介面是實現 Listener 模型的關鍵 Object EventObject AWTEvent ActionEvent AdjustmentEvent ItemEvent TextEvent ComponentEvent KeyEvent ContainerEvent FocusEvent PaintEvent WindowEvent InputEvent MouseEvent MouseWheelEvent 55 56 Source-Listener 的互動 Listener Interface addlistener Listener ActionListener Interface 聆聽 JButton 的物件必須實現 ActionListener Listener Source addlistener Notification of event public interface ActionListener extends EventListener /** * Invoked when an action occurs. */ public void actionperformed(actionevent e); 57 58 Notification Prototype source.addxxx(listener) 介面 ActionListener 定義 message prototype JButton 送出的訊息 ActionEvent 參數包括額外資訊 來源物件 (e.getsource()) 發生時間 鍵盤組合鍵 Listener 向 Source 登記來建立關係 Example: button.addactionlistener(listener) Listener 必須實現 ActionListener 介面 必須回應 button 將會送出的訊息 public void actionperformed(actionevent e); 59 60 10

Event Notification 當動作發生時 Button is clicked Source 發送通知給每一個 Listener JButton 發送 actionperformed() 訊息給每一個 listener Using a Button and a Listener #1 Component implements ActionListener The component could implement the ActionListener interface directly Register this as the listener object class MyComponent extends JComponent implements ActionListener... // in the JComponent ctor button.addactionlistener(this); 61 62 Using a Button and a Listener #2 Anonymous Inner class Create an inner class Create a MyListener inner class which implements ActionListener Create a new MyListener object Add it via button.addxxx(listener) // in the JComponent ctor ActionListener listener = new MyActionListener(); button.addactionlistener(listener); Most common method! Create an Anonymous Inner Class that implements the interface Can be created on the fly inside the method! button = new JButton("Beep"); panel.add(button); button.addactionlistener( new ActionListener() public void actionperformed(actionevent e) Toolkit.getDefaultToolkit().beep(); ); 63 64 Button Listener Example ButtonListener Example Code // ListenerFrame.java import javax.swing.event.*; import java.awt.event.*; /* Demonstrates bringing up a frame with a couple of buttons in it. Demonstrates using anonymous inner class listener. */ public class ListenerFrame extends JFrame private JLabel label; 65 66 11

Button Listener Example Button Listener Example public ListenerFrame() super("listenerframe"); JComponent content = (JComponent) getcontentpane(); content.setlayout(new FlowLayout()); JButton button = new JButton("Beep!"); content.add(button); // 2. Add the listener to the button button.addactionlistener(listener); // ---- // Creating a listener in 1 step... // ---- // Creating an action listener in 2 steps... // 1. Create an inner class subclass of ActionListener ActionListener listener = new ActionListener() public void actionperformed(actionevent e) Toolkit.getDefaultToolkit().beep(); ; // Create a little panel to hold a button // and a label JPanel panel = new JPanel(); content.add(panel); JButton button2 = new JButton("Yay!"); label = new JLabel("Woo Hoo"); panel.add(button2); panel.add(label); 67 68 Button Listener Example // This listener adds a "!" to the label. button2.addactionlistener( new ActionListener() public void actionperformed(actionevent e) String text = label.gettext(); label.settext(text + "!"); // note: we have access to "label" of outer class // we do not have access to local vars like 'panel', // unless they are declared final. ); Misc. Listeners JCheckBox Uses ActionListener, like JButton Responds to boolean isselected() to see if it is currently checked pack(); setvisible(true); 69 70 PopupMenu public mypopupmenu( String title ) super (title); pop1 = new JPopupMenu( "Popup Sample" ); JMenuItem s = new JMenuItem( "Save" ); JMenuItem l = new JMenuItem( "Load" ); b = new JButton( "Press me" ); add( b, "Center" ); b.addactionlistener( this ); pop1.add( s ); pop1.add( l ); add( pop1 ); public void actionperformed( ActionEvent ev ) pop1.show( b, 10, 10 ); 71 72 12

Color Controlling 設定 component 的顏色 setforeground(): 設定前景顏色 setbackgroud(): 設定背景顏色 自訂顏色 : RGB 三個參數 Red, Green, Blue, 範圍 :0 ~ 255 int r=255, g=255, b=0; Color c = new Color( r, g, b ); 73 74 public class mycolor extends Frame public static void main( String args[] ) mycolor btnexam = new mycolor( "Color Example" ); Color newcolor = new Color( 200, 100, 0 ); Button btn1 = new Button( "Color ForeGround Green" ); Button btn2 = new Button( "Color BackGround Blue" ); Button btn3 = new Button( "Color BackGround User Define(200, 100, 0)" ); btn1.setforeground( Color.yellow ); btn2.setbackground( Color.blue ); btn3.setbackground( newcolor ); p.add( btn1 ); p.add( btn2 ); p.add( btn3 ); btnexam.add( p ); btnexam.setsize( 100, 100 ); btnexam.setvisible( true ); public mycolor( String title ) super (title); 75 76 public class myfont extends Frame public static void main( String args[] ) myfont btnexam = new myfont( "Font Example" ); Font f1 = new Font( "Dialog", Font.BOLD, 25 ); Font f2 = new Font( "Courier", Font.ITALIC, 35 ); Font f3 = new Font( "TimesRoman", Font.PLAIN, 45 ); Button btn1 = new Button( "Font Dialog/BOLD/25 " ); Button btn2 = new Button( "Font Courier/ITALIC/35" ); Button btn3 = new Button( "Font TimesRoman/PLAIN/45" ); btn1.setfont( f1 ); btn2.setfont( f2 ); btn3.setfont( f3 ); p.add( btn1 ); p.add( btn2 ); p.add( btn3 ); btnexam.add( p ); btnexam.setsize( 100, 100 ); btnexam.setvisible( true ); public myfont( String title ) super (title); Font Controlling 設定 component 上的字體, 包括 (Font Name/Style/Size) 77 78 13

79 14