国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java之GUI

2019-11-06 07:44:42
字體:
來源:轉載
供稿:網友

(本文為博主java課程學習總結)

GUI—— 圖形化用戶界面

JFC(Java Foundation Classed)是開發GUI的API集

JFC包括:AWT(Abstract Window Toolkit抽象窗口工具包)、Swing組件(建立在AWT上功能更強大的圖形組件包)、JAVA 2D(實現高質量二維圖形)

一.AWT框架

AWT的核心類是Component類。

Component類由基本組件和容器(Container)組件組成。

容器組件主要分為兩部分:Window容器和Panel(面板)容器。

*Frame:Window容器的子類,帶有標題和縮放角的窗口。

Frame容器被創建后是不可見的,所以我們需要人為設置可見性。

常用方法:

顯示窗體方法      void setVisible(boolean b)(在Component類中)

設置背景色        setBackground(Color C)

設置尺寸        setSize(int a , int b)(a為長,b為寬,單位為像素)

限制位置和尺寸  setBound(int x,int y,int a,int b)(x,y為窗體橫縱坐標)

Panel容器只能存在于其它的容器中,不能單獨顯示。應用程序可以將其他組件放在面板提供的空間內,這些組件包括其它面板。

面板的默認布局管理器是FlowLayout布局管理器。

若需要要去掉panel指令的默認管理器,可初始化panel后調用方法panel.setLayout(null).

容器可以容納容器和組件,故可以制作出復雜的布局。

二.布局管理器

布局管理器:決定組件的位置和大小。

五種布局管理器:

FlowLayout(流式布局管理器)  

 

BorderLayout(邊界布局管理器)

 

調用方法:

 

GridLayout(網格布局管理器)

 

CardLayout(卡片布局管理器)

它將容器中的每個組件看作一張卡片。一次只能看到一張卡片,容器則充當卡片的堆棧。當容器第一次顯示時,第一個添加到 CardLayout對象的組件為可見組件。

GridBagLayout(網格包布局管理器)

每個Container都有默認的布局管理器,但是我們可以通過設置空布局管理器(setLayout(null))來控制組件的大小和位置。

設置空布局管理器后,必須對所有組件調用setLocation(),setSize()或setBound()進行一個重定位。

 

二.AWT事件處理

AWT事件處理主要針對下述三類對象:

Event(事件):用戶對組件的一個操作

Event Source(事件源):事件發生的場所,如Button1

Event Monitor(事件監聽器):監聽事件是否被處理。

 

(引自海同網校)

 

(一)AWT事件

AWT相關事件繼承于java.awt.AWTEvent類。

這些事件分為兩大類:低級事件和高級事件。

1.低級事件:基于組件的事件,如:

ComponentEvent         組建事件:組件尺寸與位置變化

ContainerEvent          容器事件:組件增加、移動

WindowEvent           窗口事件:關閉窗口、窗口閉合、圖標化

FocusEvent             焦點事件:焦點的獲得和丟失

KeyEvent               鍵盤事件

MouseEvent 鼠標事件

 

2.高級事件:基于語義的事件,如:

ActionEvent            動作事件:當特定于組件的動作(比如被按下)發生時,由組件(比如Button)生成此高級別事件。事件被傳遞給每一個ActionListener 對象,這些對象是使用組件的addActionListener 方法注冊的,用以接收這類事件。

AdjustmentEvent       調節事件:滾動條的滑動影響數目的改變等

ItemEvent             項目事件:選定或取消選定語義事件

TextEvent              文本事件:對文本對象的改變

 

(二)事件監聽器

事件監聽器通常是指一個類,通過該類必須實現與該事件類型相對應的接口。

注:事件監聽器接口類名稱與事件名稱相對應。如:MouseEvent—— MouseListener

(三)事件適配器類

某些事件監聽接口有對應的事件適配器類。通過事件適配器類,我們可以更簡單地實現事件監聽,從而縮短程序代碼。

java.awt.event包中定義的事件適配器類包括以下七個:

MouseAdapter(鼠標適配器)、MouseMotionAdapter(鼠標運動適配器)、KeyAdapter(鍵盤適配器)、WindowAdapter(窗口適配器)、ComponentAdapter(組件適配器)、ContainerAdapter(容器適配器)、FocusAdapter(焦點適配器)

(四)觀察者模式

定義對象間的一對多依賴關系,當一方的對象改變狀態時所有的依賴著都會得到通知并自動更新。

觀察者模式中任意數目的觀察者不必知道彼此的存在。這種狀態使代碼具有較好的可重用性。

1. Subject(主題)

提供注冊和注銷觀察者的接口

2. Observer(觀察者)

為需要在主題變化時獲得通知的對象定義一個更新接口。

3. ConcreteSubject(具體主題)

主題接口的一個實現類

4. ConcreteObserver(具體觀察者)

觀察者接口的實現類

 

三.Swing

Swing:用于開發Java應用程序用戶界面的開發工具包

Swing控件可跨平臺運行。

獨立于本地平臺的Swing控件稱為輕量級控件,依賴于本地平臺的AWT控件稱為重量級控件。

工具包中所有的包都是以swing作為名稱的,如:

javax.swing,javax.swing.event

swing組件的層次框架圖:

 

(圖片源自海通網校)

創建圖形界面的主要步驟:

1.導入Swing包

2.設置頂層容器

3.設置按鈕和標簽等Swing組件

4.將組件添加至容器中

5.處理事件

例:

 

(圖片源自海同網校)

 

具體操作方法參照記事本實例。

 

 

代碼如下:

packagecom.iotek.swing;importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.FileDialog;importjava.awt.Frame;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;/** * Created by asus on 2017/2/15. *記事本實例 */public classNotePadDemo{    public static void main(String[] args){        newMyFrame("記事本");    }}classMyFrameextendsJFrame{    PRivateJTextAreatv_area=null;    privateJScrollPanes_pane=null;//帶滾動條的面板    privateJMenuBarmb=null;//菜單欄    privateJMenum_file=null;//文件菜單    privateJMenum_help=null;//幫助菜單    privateJMenuItemf_item_new=null;//文件菜單的菜單項(子菜單):新建    privateJMenuItemf_item_open=null;//文件菜單的菜單項(子菜單):打開    privateJMenuItemf_item_exit=null;//文件菜單的菜單項(子菜單):退出    privateJMenuItemf_item_about=null;//文件菜單的菜單項(子菜單):關于    publicMyFrame(Stringtitle) {        super(title);        init();        registerListener();    }    //初始化相關的組件    private void init() {        tv_area=newJTextArea();        s_pane=newJScrollPane(tv_area);        //在需要時出現水平滾動條        s_pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);        Containercpane=this.getContentPane();        cpane.add(s_pane,BorderLayout.CENTER);        this.setSize(500,500);//設置窗體大小        //初始化菜單        mb=newJMenuBar();//新建菜單        m_file=newJMenu("文件");//新建文件菜單和其菜單項        f_item_new=newJMenuItem("新建");        f_item_open=newJMenuItem("打開");        f_item_exit=newJMenuItem("退出");        m_file.add(f_item_new);        m_file.add(f_item_open);        m_file.add(f_item_exit);        m_help=newJMenu("幫助");//新建幫助菜單和其菜單項        f_item_about=newJMenuItem("關于");        m_help.add(f_item_about);        mb.add(m_file);//將文件菜單與幫助菜單添加到菜單欄上        mb.add(m_help);        //把菜單欄添加到窗體中        this.setJMenuBar(mb);        this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);//關閉窗口的時候退出應用程序        //設置窗口在屏幕當中居中顯示        //定義一個工具包        Toolkittoolkit=Toolkit.getDefaultToolkit();        DimensionscreenSize=toolkit.getScreenSize();//獲得屏幕尺寸信息        intscreenWidth=screenSize.width;//獲得當前屏幕寬度        intscreenHeight=screenSize.height;//獲得當前屏幕度        intwindowWidth=this.getWidth();//獲得當前窗體寬度        intwindowHeight=this.getHeight();//獲得當前窗體高度        this.setLocation((screenWidth-windowWidth)/2, (screenHeight-windowHeight)/2);//使屏幕居中        this.setVisible(true);//顯示窗體    }    //給相關組件設置事件監聽器    private void registerListener() {        f_item_new.addActionListener(e -> newFile());        f_item_open.addActionListener(e->openFile());        f_item_exit.addActionListener(e->exitFile());        f_item_about.addActionListener(e->aboutFile());    }    private void newFile() {        if(!tv_area.getText().equals("")) {            intres=JOptionPane.showConfirmDialog(null,"是否保存?",this.getTitle(),JOptionPane.YES_NO_CANCEL_OPTION);            if(res==JOptionPane.YES_OPTION) {                //彈出文件保存對話框                FileDialogfd=newFileDialog(this,"保存文件",FileDialog.SAVE);                fd.setVisible(true);            }else{                tv_area.setText("");//清空記事本中內容            }        }    }    //打開記事本格式文件    private void openFile(){        FileDialogof=newFileDialog(this,"打開文件",FileDialog.LOAD);        of.setVisible(true);    }    //退出    private void exitFile(){        if(!tv_area.getText().equals("")) {            intres=JOptionPane.showConfirmDialog(null,"是否保存?",this.getTitle(),JOptionPane.YES_NO_CANCEL_OPTION);            if(res==JOptionPane.YES_OPTION) {                //彈出文件保存對話框                FileDialogfd=newFileDialog(this,"保存文件",FileDialog.SAVE);                fd.setVisible(true);            }else{                tv_area.setText("");//清空記事本中內容            }        }        //退出程序        System.exit(0);    }    //關于    private void aboutFile(){        AboutDialogaboutDialog=newAboutDialog(this,"about",true);    }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇州县| 鹤岗市| 苍梧县| 高陵县| 和田县| 济源市| 岑巩县| 安达市| 芷江| 钟山县| 安阳县| 怀仁县| 古蔺县| 米泉市| 大余县| 桂平市| 儋州市| 泽普县| 孝昌县| 白银市| 陵水| 秀山| 耒阳市| 辽中县| 吴忠市| 遂川县| 綦江县| 长春市| 丰顺县| 航空| 垫江县| 随州市| 广昌县| 鄄城县| 上饶市| 彩票| 大丰市| 澎湖县| 桐庐县| 濉溪县| 革吉县|