20170706 AWT界面編程(上)

參考文獻(xiàn):《Java瘋狂講義》(第三版)

知識(shí)點(diǎn):

Swing并沒有完全替代AWT兔院,而是建立在AWT基礎(chǔ)之上,Swing僅提供了能力更強(qiáng)大的用戶界面組件斤寂,即使是完全采用Swing編寫的GUI程序仿贬,也依然需要使用AWT的事件處理機(jī)制涝焙。

所有和AWT編程有關(guān)的類都放在java.awt包中以及他的子包中,

AWT 編程中有兩個(gè)基類:Component和Menu'Component。

Component代表一個(gè)能以圖形化方式顯示出來距潘,并可與用戶交互的對(duì)象炼列。

TextField代表一個(gè)文本框

......


import java.awt.*;

public class FrameTest{

public static void main(String[] args){

Frame f=new Frame("Hello AWT");

f.setBounds(30,30,250,200);

f.setVisible(true);

}

}


Panel是AWT另一個(gè)典型的容器,它代表不能獨(dú)立存在绽昼,必須存放在其他容器中的容器唯鸭。

Panel是一個(gè)矩形區(qū)域,該區(qū)域內(nèi)可盛裝其他組件硅确。Panel容器存在的意義在于為其他組件提供空間目溉,其特點(diǎn)如下:

1、可作為容器來盛裝其他組件菱农,為放置組件提供空間缭付。

2、不能單獨(dú)存在循未,必須放置到其布局管理器陷猫。

3、默認(rèn)使用FlowLayout作為其布局管理器的妖。

ScrollPanel

帶滾動(dòng)條的Panel

布局管理器

為了使生成的圖形用戶界面具有良好的平臺(tái)無(wú)關(guān)性旁仿,Java語(yǔ)言提供了布局管理器這個(gè)工具來管理組件在容器中的布局,而不使用直接設(shè)置組件位置和大小的方式叫乌。

對(duì)于不同的組件而言责静,它們都有一個(gè)最佳大小,這個(gè)最佳大小通常是平臺(tái)相關(guān)的星虹,程序在不同平臺(tái)上運(yùn)行時(shí)零抬,相同內(nèi)容的大小可能不一樣镊讼。如果讓程序員手動(dòng)控制每個(gè)組件的大小,位置平夜,這將給編程帶來的巨大的困難蝶棋,為了解決這個(gè)問題,Java提供了LayoutManager忽妒,LayoutManager可以根據(jù)運(yùn)行平臺(tái)來調(diào)整組件的大小玩裙,程序員要做的,只是為容器選擇合適的布局管理器锰扶。

所有AWT容器都有默認(rèn)的布局管理器献酗,如果沒有為容器指定布局管理器,則該容器使用默認(rèn)的布局管理器坷牛。

setLayout(LayoutManager Lm)罕偎;

FlowerLayout布局管理器

BoderLayout布局管理器

注意:

1、當(dāng)向使用BorderLayout布局管理器的容器中添加組件時(shí)京闰,需要指定要添加到哪個(gè)區(qū)域颜及,如果沒有指定,則默認(rèn)添加到中間蹂楣。

2俏站、如果想同一個(gè)區(qū)域中添加多個(gè)組件時(shí)候,后放入的組件會(huì)覆蓋先放入的組件

知識(shí)點(diǎn):

BorderLayout最多只能放置5個(gè)組件痊土,但可以放置少于5個(gè)組件肄扎,如果么某個(gè)區(qū)域沒有放置組件,該區(qū)域并不會(huì)出現(xiàn)空白赁酝,旁邊區(qū)域的組件會(huì)自動(dòng)占據(jù)該區(qū)域犯祠,從而保證窗口有較好的外觀。

雖然BorderLayout最多放置5個(gè)組件酌呆,但因?yàn)槿萜饕彩且粋€(gè)組件衡载,所以我們可以先向Panel里添加多個(gè)組件,再把Panel添加到BorderLayout布局管理器中隙袁,從而讓BorderLayout布局管理中實(shí)際組件數(shù)遠(yuǎn)遠(yuǎn)超過5個(gè)痰娱。

GridLayout布局管理器

GridLayout布局管理器將容器分割成縱橫線分隔的網(wǎng)絡(luò),每個(gè)網(wǎng)絡(luò)所占的區(qū)域大小相同菩收。當(dāng)向使用GirdLayout布局管理器的容器中添加組件時(shí)梨睁,默認(rèn)從左向右、從上到下依次添加到每個(gè)網(wǎng)絡(luò)中娜饵。

與FlowLayout不同的是坡贺,放置在GridLayout布局管理器中組件的大小由組件所處的區(qū)域來決定。

import java.awt.*;

import java.applet.Applet;

public class GridLayoutTest{

public static void main(String[] args){

Frame f=new Frame("計(jì)算器");

Panel p1=new Panel();

p1.add(new TextField(30));

f.add(p1,"North");

Panel p2=new Panel();

//設(shè)置Panel使用GridLayout布局管理器

String[] name={"0","1","2","3","4","5","6","7","8","9"};

for(int i=0;i

p2.add(new Button(name[i]));

}

f.add(p2);

f.pack();

f.setVisible(true);

}

}

GridBagLayout布局管理器

在GridBagLayout布局管理器中,一個(gè)組件可以跨越一個(gè)或多個(gè)網(wǎng)絡(luò)拴念,并可以設(shè)置各網(wǎng)絡(luò)的大小互不相同,從而增加了布局的靈活性褐缠。

當(dāng)窗口大小發(fā)生變化時(shí)政鼠,GridBagLayout布局管理器也可以準(zhǔn)確地控制窗口各部分的拉伸。

為了處理GridBagLayout中的GUI組件的大小队魏、跨越性公般,Java提供了GridBagConstraints對(duì)象,該對(duì)象與特定的GUI組件關(guān)聯(lián)胡桨,用于控制該GUI組件的大小官帘、跨越性。

使用GridBagLaoyout步驟如下:

1昧谊、創(chuàng)建GridBagLayout布局管理器刽虹,并指定GUI容器使用該布局管理器;

2呢诬、創(chuàng)建GridBagConstraints對(duì)象涌哲,并設(shè)置該對(duì)象的相關(guān)屬性;

3尚镰、調(diào)用GridBagLayout對(duì)象的方法來建立GridBagConstraints對(duì)象和受控制組件之間的關(guān)聯(lián)

4阀圾、添加組件,與普通布局管理器添加組件的方法完全一樣狗唉。

重復(fù)步驟2~4初烘;

import java.awt.*;

import java.applet.Applet;

public class GridBagTest{

private Frame f= new Frame("Test");

private GridBagLayout gb=new GridBagLayout();

private GridBagConstraints gbc=new GridBagConstraints();

private Button[] bs =new Button[10];

public void init(){

f.setLayout(gb);

for(int i=0;i

bs[i]=new Button("按鈕"+i);}

gbc.fill=GridBagConstraints.BOTH;

gbc.weightx=1;

addButton(bs[0]);

addButton(bs[1]);

addButton(bs[2]);

gbc.gridwidth=GridBagConstraints.REMAINDER;

addButton(bs[3]);

gbc.weightx=0;

addButton(bs[4]);

gbc.gridwidth=2;

addButton(bs[5]);

gbc.gridwidth=1;

gbc.gridheight=2;

gbc.gridwidth=GridBagConstraints.REMAINDER;

addButton(bs[6]);

gbc.gridwidth=1;

gbc.gridheight=2;

gbc.weighty=1;

addButton(bs[7]);

gbc.weighty=0;

gbc.gridwidth=GridBagConstraints.REMAINDER;

gbc.gridheight=1;

addButton(bs[8]);

addButton(bs[9]);

f.pack();

f.setVisible(true);

}

private void addButton(Button button){

gb.setConstraints(button,gbc);

f.add(button);

}

public static void main(String[] args){

new GridBagTest().init();

}

}

CardLayout布局管理器

CardLayout布局管理器以時(shí)間而非空間來管理它里面的組件,它將加入容器的所有組件看成一張卡片分俯,每次只有最上面的那個(gè)Compinent才可見肾筐。

import java.awt.*;

import java.awt.event.ActionListener;

public class CardLayoutText{

Frame f=new Frame("測(cè)試窗口");

String[] names={"第一張","第二張","第三張","第四張","第五張"};

Panel pl=new Panel();

public void init(){

final CardLayout c=new CardLayout();

pl.setLayout(c);

for(int i=0;i

pl.add(names[i],new Button(names[i]));

}

//--------------------------------------------------

Panel p=new Panel();

ActionListener listener = e ->{

switch(e.getActionCommand()){

case "last":

c.previous(pl);

break;

case "next":

c.next(pl);

break;

case "第一張":

c.first(pl);

break;

case "最后一張":

c.last(pl);

break;

case "第三張":

c.show(pl,"第三張");

break;

}

};

Button previous=new Button("last");

previous.addActionListener(listener);

Button next=new Button("next");

next.addActionListener(listener);

Button first=new Button("第一張");

first.addActionListener(listener);

Button last =new Button("最后一張");

last.addActionListener(listener);

Button third=new Button("第三張");

third.addActionListener(listener);

p.add(previous);

p.add(next);

p.add(first);

p.add(last);

p.add(third);

f.add(p);

f.add(pl);

//f.add(p,BorderLayout.SOUTH);

f.pack();

f.setVisible(true);

}

public static void main(String[] args){

new CardLayoutText().init();

}

}

Panel是AWT另一個(gè)典型的容器,它代表不能獨(dú)立存在澳迫,必須存放在其他容器中的容器局齿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市橄登,隨后出現(xiàn)的幾起案子抓歼,更是在濱河造成了極大的恐慌,老刑警劉巖拢锹,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谣妻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡卒稳,警方通過查閱死者的電腦和手機(jī)蹋半,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來充坑,“玉大人减江,你說我怎么就攤上這事染突。” “怎么了辈灼?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵份企,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我巡莹,道長(zhǎng)司志,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任降宅,我火速辦了婚禮骂远,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腰根。我一直安慰自己激才,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布唠雕。 她就那樣靜靜地躺著贸营,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岩睁。 梳的紋絲不亂的頭發(fā)上钞脂,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音捕儒,去河邊找鬼冰啃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刘莹,可吹牛的內(nèi)容都是我干的阎毅。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼点弯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼扇调!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抢肛,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狼钮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捡絮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熬芜,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年福稳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涎拉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鼓拧,靈堂內(nèi)的尸體忽然破棺而出半火,到底是詐尸還是另有隱情,我是刑警寧澤季俩,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布慈缔,位于F島的核電站,受9級(jí)特大地震影響种玛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓤檐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一赂韵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挠蛉,春花似錦祭示、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至掰担,卻和暖如春汇陆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背带饱。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工毡代, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勺疼。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓教寂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親执庐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酪耕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 面向?qū)ο笾饕槍?duì)面向過程。 面向過程的基本單元是函數(shù)轨淌。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,046評(píng)論 0 4
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法迂烁,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,217評(píng)論 0 2
  • 參考文獻(xiàn):《Java瘋狂講義》(第三版) 絕對(duì)定位 絕對(duì)定位步驟: 1、Container的布局管理器設(shè)成null...
    houc閱讀 340評(píng)論 0 0
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程猿诸,因...
    小菜c閱讀 6,375評(píng)論 0 17
  • 【蔓珠~學(xué)而思-《追風(fēng)箏的人》Day3-20170726】 那個(gè)悲傷的故事婚被,我竟然忘記了阿米爾結(jié)婚這件事。今天聽著...
    榕樹下的野兔子閱讀 312評(píng)論 0 1