日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AWT概述

發布時間:2023/12/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AWT概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

AWT繼承關系

window

Panel

布局管理器

FlowLayout(流式布局管理器)

BorderLayout(邊界布局管理器)

GridLayout(網格布局管理器)

GridBagLayout(網格包布局管理器)

?CardLayout(卡片布局管理器)



AWT繼承關系

AWT提供了一系列用于圖形界面的組件,如窗口、按鈕、文本框、對話框等等。接下看一下他們之間的繼承關系:

?

window

window類是不依賴于其他容器而獨立存在容器,它有兩個子類,分別是Frame類和Dialog類。對于Frame類用于創建一個具有標題欄的框架窗口,作為程序的主界面;而Dialog用于創建一個對話框,用于實現與用戶的信息交互。

Panel

Panel是一個容器,他不能單獨存在,必須存在于其他容器中,比如Window類或者其子類,Panel對象代表了一個長方形的區域,在這個區域中可以收納其他組件,在程序中通常用Panel來實現一些特殊的布局。

布局管理器

由于組件不能單獨存在,必須放在容器當中,為了更好的布置組件的位置和尺寸,所以要設置布局管理器進行布局。在Java中,有五種布局管理器,分別為Flowlayout , Boderlayout , Gridlayout, Gridbaglayout 和 cardlayout.

FlowLayout(流式布局管理器)

布局規則:

FlowLayout構造方法Constructor描述FlowLayout?()FlowLayout?(int?align)FlowLayout?(int?align, int?hgap, int?vgap)
1

構造一個新的 FlowLayout ,具有中心對齊和默認的5單位水平和垂直間隙。

2

構造新的 FlowLayout具有指定的對齊和默認的5單位水平和垂直間隙。

3

創建一個新的流程布局管理器,具有指示的對齊方式和指示的水平和垂直間距。

參數:

align?-?對齊值,值一般是FlowLayout.LEFT?,?FlowLayout.RIGHT?,?FlowLayout.CENTER?,?FlowLayout.LEADING?,或FlowLayout.TRAILING?。?
hgap?-?組件之間和組件之間的水平間隙和?Container的邊界?
vgap?-?組件之間和組件之間的垂直間隙以及?Container的邊框

實例:

import java.awt.*; public class test1 {public static void main(String[] args) { // 創建窗口體final Frame f=new Frame("Flowlayout"); // 設置布局管理器為FlowLayout,所有組件左對齊,水平距離20,垂直距離為30f.setLayout(new FlowLayout(FlowLayout.LEFT,20,30)); // 設置窗口大小f.setSize(220,300); // 設置顯示位置f.setLocation(300,200); // 添加按鈕f.add(new Button("第1個按鈕"));f.add(new Button("第2個按鈕"));f.add(new Button("第3個按鈕"));f.add(new Button("第4個按鈕"));f.add(new Button("第5個按鈕"));f.add(new Button("第6個按鈕")); // 設置窗口可見f.setVisible(true);} }

運行結果:

分析:

所有組件有規律的進行排列,但是靈活性差了一點,還有你會發現,這個頁面不能退出,那是沒有編寫退出事件,請看下一文,詳細說明如何編寫退出事件:

AWT事件處理

BorderLayout(邊界布局管理器)

布局規則:分為五個板塊位置,如下圖:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

實例:

import java.awt.*; public class test2 {public static void main(String[] args) { // 創建窗口體,進行命名final Frame f=new Frame("Flowlayout"); // 設置布局管理器,窗口大小,窗口的位置f.setLayout(new BorderLayout());f.setSize(300,300);f.setLocation(300,200);f.setVisible(true);Button bu1=new Button("東方");Button bu2=new Button("西方");Button bu3=new Button("南方");Button bu4=new Button("北方");Button bu5=new Button("中方");f.add(bu1,BorderLayout.EAST);f.add(bu2,BorderLayout.WEST);f.add(bu3,BorderLayout.SOUTH);f.add(bu4,BorderLayout.NORTH);f.add(bu5,BorderLayout.CENTER);} }

運行結果:

分析:

如果不指定添加到那個區域,組件會默認添加到center區域,并且每個區域只能添加一個組件,一個區域添加多個組件時,后添加的組件會覆蓋原來的組件。

GridLayout(網格布局管理器)

布局規則:

用橫豎線把容器分為N行M列大小相同的網格,然后依次像FlowLayout一樣添加組件,并且每個網格放置一個組件。

GridLayout構造方法Constructor描述GridLayout?()GridLayout?(int?rows, int?cols)GridLayout?(int?rows, int?cols, int?hgap, int?vgap)
1

在單個行中創建一個每個組件的默認值為一列的網格布局。

2

創建具有指定行數和列數的網格布局。

3

創建具有指定行數和列數的網格布局。

rows和cols一個但不是兩個可以為零,這意味著可以將任意數量的對象放置在行或列中。?
所有GridLayout構造函數都GridLayout這一個。?
參數?
rows?-?值為0,表示任意數量的行?
cols?-?列,值為零表示任意數量的列?
hgap?-?水平間隙?
vgap?-?垂直間隙?
實例:

import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; //網格布局管理器 public class test3 {public static void main(String[] args) {Frame f=new Frame(); // 設置窗體為3*3網格f.setLayout(new GridLayout(3,3));f.setSize(300,300);f.setLocation(400,300);for(int i=0;i<=9;i++) {Button btn=new Button("btn"+i);f.add(btn);}f.setVisible(true);} }

運行結果:

分析:

組件的相對位置不會隨著區域縮放而改變,但是組件的大小會隨著縮放會改變

GridBagLayout(網格包布局管理器)

最為復雜,最靈活的布局管理器。

布局規則:

與GridLayout相似,不同在于組件可以跨多個網格。

可以垂直,水平或沿其基準對齊組件,而不需要組件的大小相同。?每個GridBagLayout對象維護一個動態的,矩形的單元格網格,每個組件占據一個或多個單元格,稱為其顯示區域?。?由GridBagLayout管理的每個組件與一個GridBagConstraints的實例相關聯。?constraints對象指定組件的顯示區域在網格上的位置以及組件在其顯示區域內的位置。?除了其約束對象? ? ? ? 外,?GridBagLayout還考慮每個組件的最小和首選大小,以確定組件的大小。?
容器的整體方向取決于集裝箱的ComponentOrientation屬性。?對于水平從左到右的方向,網格坐標(0,0)位于容器的左上角,其中x向右增加,y向下增加。?對于水平從右到左的方向,網格坐標(0,0)位于容器的右上角,其中x向左增加,y向下增加。?為了有效使用網格包布局,必須定制一個或多個GridBagConstraints了與它的組件相關聯的對象。

GridBagLayout常用屬性

1.GridBagConstraints.gridx , GridBagConstraints.gridy?
指定包含組件顯示區域的前角的單元格,其中網格原點的單元格地址gridx = 0 ,gridy = 0 。 對于水平從左到右的布局,組件的前角是其左上角。 對于水平從右到左的布局,組件的前角是其右上角。 使用GridBagConstraints.RELATIVE (默認值)來指定在添加該組件之前添加到容器中的組件,立即將組件放置在(沿x軸為gridx或y軸為gridy )之后。?
2.GridBagConstraints.gridwidth , GridBagConstraints.gridheight?
指定組件顯示區域中一行中的單元格數( gridwidth )或列( gridheight )。 默認值為1.使用GridBagConstraints.REMAINDER指定組件的顯示區域將從gridx到行中的最后一個單元格( gridwidth )或從gridy到列的最后一個單元格( gridheight )。 使用GridBagConstraints.RELATIVE指定組件的顯示區域將從gridx到其行中最后一個單元格的下一個( gridwidth或從gridy到其列中最后一個單元格的gridheight )( gridheight )。?
3.GridBagConstraints.fill?
當組件的顯示區域大于組件的請求大小時使用,以確定是否(以及如何)調整組件的大小。 可能的值為

GridBagConstraints.NONE (默認值), GridBagConstraints.HORIZONTAL (使組件寬度足以水平填充其顯示區域,但不要更改其高度), GridBagConstraints.VERTICAL (使組件足夠高以垂直填充其顯示區域,但不要更改其寬度)和GridBagConstraints.BOTH (使組件完全填充其顯示區域)。

4.GridBagConstraints.weightx, GridBagCOnstraints.weighty

設置組件占領容器中多余的水平方向和豎直方向空白比例(也稱為權重)。?
5.GridBagConstraints.ipadx , GridBagConstraints.ipady?
在布局中指定組件的內部填充,添加到組件的最小大小的多少。 組件的寬度至少為其最小寬度加上ipadx像素。 類似地,組件的高度將至少為最小高度加上ipady像素。?
6.GridBagConstraints.insets?
指定組件的外部填充,組件與其顯示區域邊緣之間的最小空間量。?
7.GridBagConstraints.anchor?
指定組件在其顯示區域中的位置。 有三種可能的值:絕對值,方向相對值和基線相對方向相對值相對于容器的ComponentOrientation屬性進行解釋,絕對值不是。 基線相對值相對于基線計算。 有效值為: Absolute, relative and baseline values as described above?

實例:

package daya7; import java.awt.*; // 網格包布局 class Layout extends Frame{public Layout(String title) { // 創建布局管理器,采用該布局GridBagLayout layout=new GridBagLayout();GridBagConstraints c=new GridBagConstraints();this.setLayout(layout); // 設置組件橫豎可拉伸距離,c.fill =GridBagConstraints.BOTH; // 設置橫向,豎向權重為1c.weightx=1;c.weighty=1;this.addComponent("btn1",layout,c);this.addComponent("btn2",layout,c);this.addComponent("btn3",layout,c); // 添加組件是本行最后一個組件c.gridwidth=GridBagConstraints.REMAINDER;this.addComponent("btn4", layout, c);c.weightx=0;c.weighty=0;this.addComponent("btn5", layout, c); // 設置組件跨一個網格(默認值)c.gridwidth=1;this.addComponent("btn6", layout, c); // 添加組件是本行最后一個組件c.gridwidth=GridBagConstraints.REMAINDER;this.addComponent("btn7", layout, c); // 設置組件縱向跨兩個網格,橫向跨一個網格,橫向豎向權重為2c.gridheight=2;c.gridwidth=1;c.weightx=2;c.weighty=2;this.addComponent("btn8", layout, c);c.gridwidth=GridBagConstraints.REMAINDER;c.gridheight=1;this.addComponent("btn9", layout, c);this.addComponent("btn10", layout, c);this.setTitle(title);this.pack();this.setVisible(true); } // 添加組件的方法private void addComponent(String name, GridBagLayout layout, GridBagConstraints c) {// TODO Auto-generated method stubButton bt=new Button(name); // 設置GridBagConstraints和按鈕的關聯layout.setConstraints(bt, c); // 增加按鈕this.add(bt);} } public class test4_a{public static void main(String[] args) {new Layout("GridBagLayout");} }

運行結果:

?CardLayout(卡片布局管理器)

布局規則:

把界面看作一系列卡片,便于切換界面,一次只能顯示一個界面卡片

實例:

package daya8; import java.awt.*; import java.awt.event.*; //定義Cardlayout繼承Frame類,實現ActionListener接口 class Cardlayout extends Frame implements ActionListener{ // 定義Panel畫板放置卡片Panel cardPanel =new Panel(); // 定義Panel面板放置按鈕Panel controlpaPanel=new Panel();Button nextButton,preButton; // 定義卡片布局對象CardLayout cardLayout=new CardLayout(); // 定義構造方法,設置卡片布局管理器的屬性public Cardlayout() {setSize(400,400);setVisible(true); // 為窗口添加關閉事件監聽器this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {Cardlayout.this.dispose();}});cardPanel.setLayout(cardLayout); // 在cardPanel面板對象添加3個文本標簽cardPanel.add(new Label("第一個界面",Label.CENTER));cardPanel.add(new Label("第二個界面",Label.CENTER));cardPanel.add(new Label("第三個界面",Label.CENTER)); // 創建兩個按鈕對象nextButton=new Button("下一張");preButton =new Button("上一張"); // 為按鈕對象注冊監聽器nextButton.addActionListener(this);preButton.addActionListener(this); // 將按鈕添加到controlpaPanelcontrolpaPanel.add(nextButton);controlpaPanel.add(preButton); // 將cardPanel面板放置在窗口邊界布局的中間,窗口默認為邊界布局this.add(cardPanel,BorderLayout.CENTER); // 畫板放置在窗口邊界布局的南區this.add(controlpaPanel,BorderLayout.SOUTH);}@Override // 下面的代碼實現了按鈕的監聽觸發,并對觸發事件做出相應的處理public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==nextButton) {cardLayout.next(cardPanel);}if(e.getSource()==preButton) {cardLayout.previous(cardPanel);}} } public class test2 {public static void main(String[] args) {System.out.println("a");Cardlayout cardlayout=new Cardlayout();} }

運行結果:

?不使用布局管理器

當一個容器創建的時候,都會有個默認的布局管理器,window,Frame 和Dialog默認管理器是BorderLayout,Panel默認管理器是FlowLayout。如果不希望通過布局管理器進行布局,可以利用容器的setLayout()方法將布局管理器進行取消。

布局規則:

調用組件setSize和setLocation(或者setBounds方法)為組件進行定位。

實例:

import java.awt.*; public class test6 {public static void main(String[] args) {Frame f=new Frame("不用布局管理器");f.setLayout(null);f.setSize(400,400);f.setLocation(300,300);Button btn1=new Button("one");Button btn2=new Button("two"); // 設置按鈕左上角的x,y坐標以及按鈕的長寬btn1.setBounds(20, 30, 100, 40);btn2.setBounds(140, 100, 50, 20);f.add(btn1);f.add(btn2);f.setVisible(true);} }

運行結果:

AWT事件處理

?實現關閉功能

package daya8; import java.awt.*; import java.awt.event.*; //監聽事件 public class test3 {public static void main(String[] args) {Frame f=new Frame("my Window");f.setSize(400,300);f.setLocation(300,400);f.setVisible(true); // 為窗口組件注冊監聽器MyWindowListener mw=new MyWindowListener();f.addWindowListener(mw); } } class MyWindowListener implements WindowListener{@Overridepublic void windowOpened(WindowEvent e) {// TODO Auto-generated method stub}@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubWindow window=e.getWindow();window.setVisible(false);window.dispose();}@Overridepublic void windowClosed(WindowEvent e) {// TODO Auto-generated method stub // System.out.println("111111111111");}@Override // 窗口初始化設置public void windowIconified(WindowEvent e) {// TODO Auto-generated method stub} // 窗口已確認@Overridepublic void windowDeiconified(WindowEvent e) {// TODO Auto-generated method stub} // 窗口已激活@Overridepublic void windowActivated(WindowEvent e) {// TODO Auto-generated method stub} // 窗口已停用@Overridepublic void windowDeactivated(WindowEvent e) {// TODO Auto-generated method stub}}

事件適配器

package daya8; import java.awt.*; import java.awt.event.*; //事件適配器 public class test4 {public static void main(String[] args) {Frame f=new Frame("my Window");f.setSize(400,300);f.setLocation(300,400);f.setVisible(true);f.addWindowListener(new MyWindowListenera());}} class MyWindowListenera extends WindowAdapter{public void windowClosing(WindowEvent e) { // 獲取組件Window window =(Window) e.getComponent(); // 處理window.dispose();} }

用匿名內部類實行事件處理

package daya8; import java.awt.*; import java.awt.event.*; //事件適配器 public class test4 {public static void main(String[] args) {Frame f=new Frame("my Window");f.setSize(400,300);f.setLocation(300,400);f.setVisible(true);f.addWindowListener(new MyWindowListenera());}} class MyWindowListenera extends WindowAdapter{public void windowClosing(WindowEvent e) { // 獲取組件Window window =(Window) e.getComponent(); // 處理window.dispose();} }

總結

以上是生活随笔為你收集整理的AWT概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。