day22-01-GUI(概述)\02-GUI(布局)\03-GUI(事件監(jiān)聽(tīng)機(jī)制)\04-GUI(事件監(jiān)聽(tīng)機(jī)制)\05-GUI(窗體事件)

一、GUI(圖形用戶(hù)界面)

Graphical User Interface(圖形用戶(hù)接口)。 ? 用圖形的方式,來(lái)顯示計(jì)算機(jī)操作的界面,這樣更方便更直 觀(guān)。
CLI ? Command line User Interface (命令行用戶(hù)接口) ? 就是常見(jiàn)的Dos命令行操作。 ? 需要記憶一些常用的命令,操作不直觀(guān)。
舉例: ? 比如:創(chuàng)建文件夾,或者刪除文件夾等
Java為GUI提供的對(duì)象都存在java.Awt和javax.Swing兩個(gè)包中

二、Awt與Swing

java.Awt:Abstract Window ToolKit (抽象窗口 工具包 ),需要調(diào)用本地系統(tǒng)方法實(shí)現(xiàn)功能。屬 重量級(jí)控件。 ? javax.Swing:在AWT的基礎(chǔ)上,建立的一套圖 形界面系統(tǒng),其中提供了更多的組件,而且完全 由Java實(shí)現(xiàn)。增強(qiáng)了移植性,屬輕量級(jí)控件

三、繼承關(guān)系圖

image.png

Container:為容器,是一個(gè)特殊的組件,該組件中可以通過(guò)add 方法添加其他組件進(jìn)來(lái)

四、布局管理器

容器中的組件的排放方式,就是布局。
常見(jiàn)的布局管理器:
?FlowLayout(流式布局管理器)
?從左到右的順序排列。
?Panel默認(rèn)的布局管理器。
?BorderLayout(邊界布局管理器)
?東,南,西,北,中 ?Frame默認(rèn)的布局管理器。
?GridLayout(網(wǎng)格布局管理器)
?規(guī)則的矩陣 ?CardLayout(卡片布局管理器)
?選項(xiàng)卡
?GridBagLayout(網(wǎng)格包布局管理器)
?非規(guī)則的矩陣

五、建立一個(gè)簡(jiǎn)單的窗體

Container常用子類(lèi):Window Panel(面板, 不能單獨(dú)存在。)
Window常用子類(lèi):Frame Dialog
簡(jiǎn)單的窗體創(chuàng)建過(guò)程: ? Frame f = new Frame(“my window”);
? f.setLayout(new FlowLayout());
? f.setSize(500,400);//設(shè)置窗體大小
? f.setLocation(300,200);//設(shè)置窗體出現(xiàn)在屏幕的位置
? f.setVisible(true);


image.png

/*
創(chuàng)建圖形化界面,
1,創(chuàng)建frame窗體
2,對(duì)窗體進(jìn)行基本設(shè)置
比如大小,位置,布局
3,電儀組件
4,將組件通過(guò)窗體的add方法添加到窗體中
5,讓窗體顯示,通過(guò)Setvisble();

時(shí)間監(jiān)聽(tīng)機(jī)制的特點(diǎn):
1,事件源
2,事件
3,監(jiān)聽(tīng)器
4,事件處理

事件源:就是awt包或者swing包中的那些圖像化界面組件
事件:每一個(gè)事件源都有自己特有的對(duì)應(yīng)事件和共性事件。
監(jiān)聽(tīng)器:將可以觸發(fā)某一個(gè)事件(不只一個(gè)動(dòng)作)的動(dòng)作都已經(jīng)封裝帶了監(jiān)聽(tīng)器中。

以上三者,在java中都已經(jīng)定義好了。
直接獲取其對(duì)象來(lái)用就可以了。
我們要做的事情,就是對(duì)產(chǎn)生的動(dòng)作進(jìn)行處理。

package day22;

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

public class FrameDemo
{
      public static void main(String[] args)
        {
            //創(chuàng)建窗體,圖行畫(huà)界面是外一個(gè)線(xiàn)程。默認(rèn)邊界布局
            Frame f = new Frame("my awt");

            //設(shè)置窗體長(zhǎng)(橫坐標(biāo))和寬(縱坐標(biāo))
            f.setSize(500,100);
            //窗體彈出的位置
            f.setLocation(300,200);

            //布局,流式布局
            f.setLayout(new FlowLayout());


            Button b = new Button("我是一個(gè)按鈕");

            f.add(b);
            //只有一個(gè)方法,寫(xiě)匿名內(nèi)部類(lèi)
            f.addWindowListener(new WindowAdapter()
            {
                public void  windowClosing(WindowEvent e)
                {
                    System.out.println("我關(guān)");
                    System.exit(0);
                }
                public void windowActivated(WindowEvent e)
                {
                    //窗體前置
                    System.out.println("我活了");

                }
                public void windowOpened(WindowEvent e)
                {
                    System.out.println("我被打開(kāi)了");
                }

            });

            f.setVisible(true);
            System.out.println("hello world");
        }
    }
/*
class MyWin implements WindowListerner
{
    //覆蓋7個(gè)方法.可是我只用到了關(guān)閉的動(dòng)作。其他動(dòng)作都沒(méi)有用到,可是必須復(fù)寫(xiě)。
}
*/

    //因?yàn)閃indowlistener的子類(lèi)WindowAdapter已經(jīng)實(shí)現(xiàn)了WindowListener
//并覆蓋了其中的所有方法。那么我們只要繼承Windowadapter覆蓋我們需要的方法接口
    class MyWin extends WindowAdapter
    {
        @Override
        public void windowActivated(WindowEvent e)
        {
            //System.out.println("window close"+e.toString());
            System.exit(0);
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容