《圖形用戶界面設(shè)計(jì)》PPT課件.ppt

上傳人:w****2 文檔編號:15598659 上傳時間:2020-08-23 格式:PPT 頁數(shù):41 大?。?07.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
《圖形用戶界面設(shè)計(jì)》PPT課件.ppt_第1頁
第1頁 / 共41頁
《圖形用戶界面設(shè)計(jì)》PPT課件.ppt_第2頁
第2頁 / 共41頁
《圖形用戶界面設(shè)計(jì)》PPT課件.ppt_第3頁
第3頁 / 共41頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《圖形用戶界面設(shè)計(jì)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《圖形用戶界面設(shè)計(jì)》PPT課件.ppt(41頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、1,圖形用戶界面設(shè)計(jì),2,概述 組件和容器 布局設(shè)計(jì) 圖形編程,圖形用戶界面設(shè)計(jì),3,概述,用戶界面(User Interface),用戶與計(jì)算機(jī)系統(tǒng)(各種程序)交互的接口 AWT (Abstract Window Toolkit) 一些用戶界面組件 (Component) 事件響應(yīng)模型 (Event-handling model) 布局管理器 (Layout manager) 繪圖和圖形操作類, 如Shape、Font、Color類等,4,概述,AWT中主要類的繼承關(guān)系,5,概述,6,概述,Swing組件在實(shí)現(xiàn)時不包含任何本地(native)代碼 Swing組件可以不受硬件平臺的限制,而具有

2、更多的功能 Swing被稱為“輕量級(lightweight)”組件,AWT稱為“重量級(heavyweight)”組件 “重量級”組件與“輕量級”組件一同使用時,如果組件區(qū)域有重疊,則“重量級”組件總是顯示在上面 Javax.Swing包,7,概述,Swing主要類的繼承關(guān)系,8,概述,圖形用戶界面的實(shí)現(xiàn) 選取組件 設(shè)計(jì)布局 響應(yīng)事件 應(yīng)用原則 Swing比AWT提供更全面、更豐富的圖形界面設(shè)計(jì)功能 Java 2平臺支持AWT組件,但鼓勵用Swing組件,9,組件和容器,組件 Java把由Component類的子類或間接子類創(chuàng)建的對象稱為一個組件。 容器 Java把由Container類的子

3、類或間接子類創(chuàng)建的對象稱為一個容器。,10,組件和容器,添加組件 通過add()方法添加到容器中 容器嵌套 fra.add(pan) 布局管理器,11,組件和容器,java.awt.Frame: 有邊框容器 構(gòu)造方法 Frame() Frame(String title) 常用方法 getTitle() setTitle(String s) setVisible(boolean b) setBounds(int a, int b, int width, int height) setBackground(Color c) pack() setSize(int width, int heig

4、ht) dispose() add() remove(),12,組件和容器,Frame框架類 import java.awt.*;public class MyFrame extends Framepublic static void main(String args )MyFrame fr = new MyFrame(“Hello Out There!”); //構(gòu)造方法fr.setSize(200,200); //設(shè)置Frame的大小,缺省為(0,0) fr.setBackground(Color.red); //設(shè)置Frame的背景,缺省為白色fr.setVisible(tru

5、e); //設(shè)置Frame為可見,缺省為不可見 public MyFrame (String str)super(str); //調(diào)用父類的構(gòu)造方法,13,組件和容器,Panel面板類 一種沒有標(biāo)題的容器。實(shí)例化后必須用Container的add方法加入到Window對象中。,14,import java.awt.*;public class FrameWithPanel extends Frame public FrameWithPanel(String str)super(str); public static void main(String args) Fra

6、meWithPanel fr = new FrameWithPanel(Frame with Panel); Panel pan=new Panel();fr.setSize(200,200);fr.setBackground(Color.red); //框架fr的背景顏色設(shè)置為紅色fr.setLayout(null); //取消布局管理器pan.setSize(100,100);pan.setBackground(Color.yellow); //設(shè)置面板pan的背景顏色為黃色fr.add(pan); //用add方法把面板pan添加到框架fr中fr.setVisible(true);,15

7、,組件和容器,頂層容器 所有組件都必須包含在某個容器中,而有些容器是可以嵌套的,在這個嵌套層次的最外層,必須是一個頂層(Top level)容器 四種頂層容器 JFrame、JApplet、JDialog和Jwindow JFrame是一個帶有標(biāo)題行和控制按鈕(最小化、恢復(fù)/最大化、關(guān)閉)的獨(dú)立窗口,創(chuàng)建應(yīng)用程序時需要使用JFrame。創(chuàng)建小應(yīng)用程序時使用JApplet,它被包含在瀏覽器窗口中。創(chuàng)建對話框時使用JDialog。JWindow是一個不帶有標(biāo)題行和控制按鈕的窗口,因此通常很少使用,16,組件和容器,內(nèi)容窗格 頂層容器都有一個內(nèi)容窗格(Content Pane) 頂層容器中除菜單之外

8、的組件都是放在這個內(nèi)容窗格中 將組件放入內(nèi)容窗格 通過頂層容器的getContentPane()方法獲得其缺省的內(nèi)容窗格,然后將組件添加到內(nèi)容窗格中,Container contentPane = frame.getContentPane(); contentPane.add(button, BorderLayout.CENTER); frame.getContentPane().add(button, BorderLayout.CENTER);,17,import java.awt.*; import javax.swing.*; public class JFrameDemo public

9、 static void main(String s) JFrame frame = new JFrame(JFrameDemo); //創(chuàng)建一個JFrame的實(shí)例 JButton button = new JButton(Press me);//創(chuàng)建一個JButton的實(shí)例 //將JButton放到JFrame的中央 frame.getContentPane().add(button, BorderLayout.CENTER); frame.pack();//將JFrame設(shè)置到適當(dāng)?shù)拇笮?frame.setVisible(true);//顯示JFrame ,18,組件和容器,將組件放入內(nèi)

10、容窗格 創(chuàng)建一個新的內(nèi)容窗格取代頂層容器缺省的內(nèi)容窗格。 創(chuàng)建一個JPanel的實(shí)例,然后將組件添加到JPanel實(shí)例中,再通過頂層容器的setContentPane()方法將JPanel實(shí)例設(shè)置為新的內(nèi)容窗格,JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); contentPane.add(button, BorderLayout.CENTER); frame.setContentPane(contentPane);,19,import java.awt.*; import javax.

11、swing.*; public class JFrameDemo2 public static void main(String s) JFrame frame = new JFrame(JFrameDemo2);//創(chuàng)建一個JFrame的實(shí)例 JButton button = new JButton(Press me);//創(chuàng)建一個JButton的實(shí)例 JPanel contentPane = new JPanel();//創(chuàng)建一個JPanel的實(shí)例 //為JPanel設(shè)置BorderLayout布局管理器 contentPane.setLayout(new BorderLayout());

12、 //將JButton放到JPanel的中央 contentPane.add(button, BorderLayout.CENTER); //為JFrame設(shè)置新的內(nèi)容窗格 frame.setContentPane(contentPane); frame.pack();//將JFrame設(shè)置到適當(dāng)?shù)拇笮?frame.setVisible(true);//顯示JFrame ,20,組件和容器,練習(xí) 創(chuàng)建一個黃色面板,通過add()方法在面板中添加了一個按鈕,然后將該面板添加到一個JFrame的實(shí)例中,JFrame實(shí)例的背景被設(shè)置為藍(lán)綠色,import java.awt.*; import jav

13、ax.swing.*; public class FrameWithPanel public static void main(String args) JFrame frame = new JFrame(Frame with Panel); Container contentPane = frame.getContentPane(); contentPane.setBackground(Color.CYAN); JPanel panel = new JPanel(); panel.setBackground(Color.yellow); JButton button = new JButto

14、n(Press me); panel.add(button); contentPane.add(panel, BorderLayout.SOUTH); frame.setSize(300,200); frame.setVisible(true); ,,21,import java.awt.*; import javax.swing.*; public class ExGui private JFrame frame; private JButton b1; private JButton b2; public static void main(String args) ExGui that =

15、 new ExGui(); that.go(); ,main()方法 在這個例子中,main()方法有兩個作用。首先,它創(chuàng)建了一個ExGui類的實(shí)例,在這個實(shí)例創(chuàng)建之前,并沒有實(shí)際可用的b1和b2數(shù)據(jù)項(xiàng)。其次,當(dāng)ExGui實(shí)例創(chuàng)建好以后,main()又調(diào)用了該實(shí)例的go()方法,在這個方法中,程序的實(shí)際功能得以實(shí)現(xiàn)。,布局管理器,22,public void go() frame = new JFrame (GUI example);//創(chuàng)建一個JFrame實(shí)例 Container contentPane = frame.getContentPane(); //獲取內(nèi)容窗格 //為內(nèi)容窗格設(shè)置

16、FlowLayout布局管理器 contentPane.setLayout(new FlowLayout()); b1 = new JButton(Press me); //創(chuàng)建JButton實(shí)例 b2 = new JButton(Dont press Me); contentPane.add(b1); //添加按鈕 contentPane.add(b2); frame.pack(); frame.setVisible(true); ,new JFrame(“GUI example”) 這條語句的功能是創(chuàng)建JFrame類的一個實(shí)例。JFrame 是一個頂層級窗口,它帶有標(biāo)題框(標(biāo)題由構(gòu)造方法中

17、的String型參數(shù)“GUI example” 指定)并且可以改變大小。需要注意的是,在剛剛創(chuàng)建時,JFrame的大小為0,并且不可見。,frame.getContentPane() 這條語句獲取JFrame實(shí)例缺省的內(nèi)容窗格,此后可以修改它的布局管理器,并添加組件。,contentPane.setLayout(new FlowLayout()) 這條語句創(chuàng)建了一個FlowLayout型的布局管理器,并通過調(diào)用setLayout()方法將該布局管理器指定給前面已經(jīng)獲得的JFrame實(shí)例的缺省內(nèi)容窗格。,new JButton(“Press Me”) 這條語句的功能是創(chuàng)建javax.swing.

18、JButton類的一個實(shí)例,該實(shí)例是窗口中的標(biāo)準(zhǔn)按鈕(button),按鈕上的標(biāo)簽由構(gòu)造方法中String型參數(shù)“Press Me”指定。,frame.pack() 這條語句通知框架frame設(shè)定一個適當(dāng)?shù)拇笮?,以便能夠以“緊縮”的形式包容各個組件。為了做到這一點(diǎn),frame需要通知布局管理器,由布局管理器安排每個組件的大小和位置。,frame.setVisible(true) 這條語句的功能是使得框架frame以及它所包含的組件對用戶可見,在此之前,框架和組件雖然已經(jīng)創(chuàng)建好了,但是并沒有顯示出來,只有調(diào)用了setVisible(true)方法后,它們才變?yōu)榭梢姟?,23,布局管理器,組件的布

19、局,包括位置和大小,通常由布局管理器(Layout Manager)負(fù)責(zé)安排 每個容器都有一個缺省的布局管理器 通過容器的setLayout()方法改變?nèi)萜鞯牟季止芾砥?多種布局管理器 java.awt.FlowLayout、java.awt.BorderLayout、java.awt.GridLayout、java.awt.CardLayout、java.awt.GridBagLayout、 javax.swing.BoxLayout 如果用戶確實(shí)需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的布局管理器,方法為:setLayout(null);,24,布局管理器,FlowLayout (jav

20、a.awt.FlowLayout) 所有組件從左往右排成一行 一行排滿后轉(zhuǎn)到下一行從左往右排 FlowLayout構(gòu)造方法 public FlowLayout() public FlowLayout(int align) public FlowLayout(int align, int hgap, int vgap) align對齊方式的可選項(xiàng), align的可取值有FlowLayout.LEFT、FlowLayout.RIGHT和FlowLayout.CENTER三種形式 hgap和vgap,可以設(shè)定組件的水平間距和垂直間距 FlowLayout 是Panel,Applet的缺省布局管理器,

21、25,布局管理器,import java.awt.*; import javax.swing.*; public class FlowWindow extends JFrame public FlowWindow() Container contentPane = getContentPane(); contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton(Button 1)); contentPane.add(new JButton(2)); contentPane.add(new JBut

22、ton(Button 3)); contentPane.add(new JButton(Long-Named Button 4)); contentPane.add(new JButton(Button 5)); public static void main(String args) FlowWindow win = new FlowWindow(); win.setTitle(FlowLayout); win.pack(); win.setVisible(true); ,26,import java.awt.*; import javax.swing.*; publi

23、c class FlowLayoutDemo private JFrame frame; private JButton button1,button2,button3; public static void main(String args) FlowLayoutDemo that = new FlowLayoutDemo (); that.go(); public void go() frame = new JFrame(Flow Layout); Container contentPane = frame.getContentPane(); //為內(nèi)容窗格設(shè)置FlowLayout布局管理

24、器 contentPane.setLayout(new FlowLayout()); button1 = new JButton(Ok); button2 = new JButton(Open); button3 = new JButton(Close); contentPane.add(button1); contentPane.add(button2); contentPane.add(button3); frame.setSize(200,100); frame.setVisible(true); ,27,布局管理,BorderLayout (java.awt.BorderLayout)

25、 BorderLayout是頂層容器中內(nèi)容窗格的缺省布局管理器 上北、下南、左西、右東、中,表示為常量BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.EAST、BorderLayout.CENTER,28,布局管理器,通過add()方法加入到容器中的指定區(qū)域 如果在add()方法中沒有指定將組件放到哪個區(qū)域,那么它將會缺省地被放置在Center區(qū)域 在容器的每個區(qū)域,只能加入一個組件,如果向某個區(qū)域中加入多個組件,那么只有最后一個組件是有效的,frame = new JFrame(“Frame Title

26、”); button = new JButton(“Press Me”); frame.getContentPane().add(button, BorderLayout.SOUTH);,frame.getContentPane().add(button); 按鈕將被放在框架的中部,frame. getContentPane().add(new JButton(“buttonA”), BorderLayout.SOUTH); frame. getContentPane().add(new JButton(“buttonB”), BorderLayout.SOUTH); frame. getC

27、ontentPane().add(new JButton(“buttonC”), BorderLayout.SOUTH); 最后只有buttonC顯示在South區(qū)域。,29,布局管理器,四個邊界區(qū)域,如果沒有使用,大小將變?yōu)榱悖?Center區(qū)域?qū)U(kuò)展并占據(jù)這個未用區(qū)域的位置。如果均沒有使用, Center區(qū)域?qū)紦?jù)整個窗口。 符號表示 BorderLayout.SOUTH被定義為字符串South,30,import java.awt.*; import javax.swing.*; public class BorderLayoutDemo private JFrame frame;

28、private JButton be,bw,bn,bs,bc; public static void main(String args) BorderLayoutDemo that = new BorderLayoutDemo(); that.go(); void go() frame = new JFrame(Border Layout); be = new JButton(East); bs = new JButton(South); bw = new JButton(West); bn = new JButton(North); bc = new JButton(Center); fra

29、me.getContentPane().add(be,BorderLayout.EAST);frame.getContentPane().add(bs,BorderLayout.SOUTH);frame.getContentPane().add(bw,BorderLayout.WEST);frame.getContentPane().add(bn,BorderLayout.NORTH);frame.getContentPane().add(bc,BorderLayout.CENTER);frame.setSize(350,200); frame.setVisible(true); ,31,布局

30、管理器,GridLayout布局管理器 GridLayout是一種網(wǎng)格式的布局管理器,它將容器空間劃分成若干行乘若干列的網(wǎng)格,組件依次放入其中,每個組件占據(jù)一格 組件被放入容器的次序決定了它所占據(jù)的位置。每行網(wǎng)格從左至右依次填充,一行用完之后轉(zhuǎn)入下一行 當(dāng)容器的大小改變時,GridLayout所管理的組件的相對位置不會發(fā)生變化,但組件的大小會隨之改變,32,布局管理器,GridLayout構(gòu)造方法 public GridLayout() 創(chuàng)建一個只有一行的網(wǎng)格,網(wǎng)格的列數(shù)根據(jù)實(shí)際需要而定 public GridLayout(int rows, int cols) rows和cols兩個參數(shù)分別

31、指定網(wǎng)格的行數(shù)和列數(shù) rows和cols中的一個值可以為0,但是不能兩個都是0。如果為0,那么網(wǎng)格行(列)數(shù)將根據(jù)實(shí)際需要而定 public GridLayout(int rows, int cols, int hgap, int vgap) hgap和vgap分別表示網(wǎng)格間的水平間距和垂直間距,33,import java.awt.*; import javax.swing.*; public class GridWindow extends JFrame public GridWindow() Container contentPane = getContentPane(); c

32、ontentPane.setLayout(new GridLayout(0,2)); contentPane.add(new JButton(Button 1)); contentPane.add(new JButton(2)); contentPane.add(new JButton(Button 3)); contentPane.add(new JButton(Long-Named Button 4)); contentPane.add(new JButton(Button 5)); public static void main(String args) Gr

33、idWindow win = new GridWindow(); win.setTitle(FlowLayout); win.pack(); win.setVisible(true); ,34,import java.awt.*; import java.awt.event.*; public class TestGridLayout extends WindowAdapter public TestGridLayout() public void windowClosing(WindowEvent e) System.exit(0); public static void ma

34、in(String args) Frame frame = new Frame(Test Grid Layout); frame.setSize(300,200); frame.addWindowListener(new TestGridLayout()); Button button1 = new Button(1); Button button2 = new Button(2); Button button3 = new Button(3); Button button4 = new Button(4); Button button5 = new Button(5); frame.set

35、Layout(new GridLayout(2,2,10,20)); frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.add(button5); frame.setVisible(true); ,35,布局管理器,CardLayout布局管理器 卡片式的布局管理器,兩個或多個組件共享相同的顯示空間,每一時刻只顯示出其中的一張,36,import java.awt.*; import java.awt.event.*; public class TestCardLayou

36、t extends WindowAdapter implements ActionListener private Frame frame; private CardLayout cardLayout; public void run() frame = new Frame(Test Card Layout); frame.setSize(150,120); frame.addWindowListener(this); Button button1 = new Button(卡片 1); Button button2 = new Button(卡片 2); Button butto

37、n3 = new Button(卡片 3); Panel panel1 = new Panel(); panel1.setBackground(Color.yellow); Panel panel2 = new Panel(); panel2.setBackground(Color.green); Panel panel3 = new Panel(); panel3.setBackground(Color.magenta); panel1.add(button1); button1.addActionListener(this); panel2.add(button2);

38、button2.addActionListener(this); panel3.add(button3); button3.addActionListener(this);,37,frame.setLayout(cardLayout); frame.add(panel1,第一張); frame.add(panel2,第二張); frame.add(panel3,第三張); frame.setVisible(true); public void windowClosing( WindowEvent e) System.exit(0); public void actionPerf

39、ormed(ActionEvent e) cardLayout.next(frame); public static void main(String args) TestCardLayout myCardLayout = new TestCardLayout(); myCardLayout.run(); ,38,布局管理器,GridBagLayout (java.awt.GridBagLayout) 最精細(xì)、最靈活的布局管理 將空間劃分為由行和列組成的網(wǎng)格單元,每個單元放一個組件,網(wǎng)格單元大小可以不同(寬度和高度) 通過類GridBagConstraints來控制容器內(nèi)各個組件的大

40、小,每個組件都使用一個GridBagConstraints對象來給出它的大小和擺放位置,,39,布局管理,BoxLayout (javax.swing.BoxLayout) 將組件放在一行或一列 當(dāng)組件排成一行時,每個組件可以有不同的寬度;當(dāng)組件排成一列時,每個組件可以有不同的高度 BoxLayout構(gòu)造方法 BoxLayout(Container target,int axis) Container型參數(shù)target指明是為哪個容器設(shè)置此BoxLayout布局管理器 int型參數(shù)axis指明組件的排列方向,BoxLayout.X_AXIS 水平方向排列 BoxLayout.Y_AXIS 垂

41、直方向排列,40,import java.awt.*; import javax.swing.*; public class BoxLayoutDemo private JFrame frame; private JPanel pv,ph; public static void main(String args) BoxLayoutDemo that = new BoxLayoutDemo(); that.go(); void go() frame = new JFrame(Box Layout example); Container contentPane = frame.getConte

42、ntPane(); pv = new JPanel(); //將pv的布局管理器設(shè)置為垂直方向的BoxLayout pv.setLayout(new BoxLayout(pv,BoxLayout.Y_AXIS)); //為pv添加標(biāo)簽label pv.add(new JLabel( Monday)); pv.add(new JLabel( Tuesday)); pv.add(new JLabel( Wednesday)); pv.add(new JLabel( Thursday)); pv.add(new JLabel( Friday)); pv.add(new JLabel( Sa

43、turday)); pv.add(new JLabel( Sunday));,41,//將pv添加到內(nèi)容窗格的東部 contentPane.add(pv, BorderLayout.EAST); ph = new JPanel(); //將ph的布局管理器設(shè)置為水平方向的BoxLayout ph.setLayout(new BoxLayout(ph, BoxLayout.X_AXIS)); //為ph添加按鈕 ph.add(new JButton(Yes)); ph.add(new JButton(No)); ph.add(new JButton(Cancel)); //將ph添加到內(nèi)容窗格的南部 contentPane.add(ph,BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); ,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!