目錄
Swing與AWT概述
Swing概述——組件顯示
?框架與窗體
創(chuàng)建框架對(duì)象
框架Frame類結(jié)構(gòu)
?框架對(duì)象的創(chuàng)建及常用方法
創(chuàng)建Swing窗體對(duì)象
Swing窗體JFrame 類結(jié)構(gòu)
?Swing 窗體對(duì)象的創(chuàng)建
?窗體對(duì)象常用屬性
常用組件——文本組件
JLabel
JTextField
JPasswordField
JTextArea?編輯
?Jlist文本列表組件
?常用組件——選擇組件
JButton組件
?JCheckBox組件
JRadioButton組件常用方法介紹
JComBox組件
?對(duì)象的創(chuàng)建
?編輯
表格組件
?常用布局
FlowLayout:流式布局
BorderLayout:邊框布局
GridLayout:網(wǎng)格布局
BoxLayout:箱式布局
?自定義布局
事件處理機(jī)制
GUI事件響應(yīng)機(jī)制概述
ActionEvent事件
Swing與AWT概述
UI是什么?
? 答案是“用戶界面”,UI是User interface的縮寫(xiě)。
圖形用戶界面是什么呢?
? 圖形用戶界面又稱圖形用戶接口 (Graphical User Interface,GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作環(huán)境用戶接口(即采用圖形方式顯示的用戶交互界面),這是與早期計(jì)算機(jī)使用的命令行界面相比的。AWT是什么?
AWT(Abstract Window Toolkit/抽象窗口工具包)是早期的Java API提供的建立圖形用戶界面GUI(Graphics User Interface)的工具集。
AWT的主要組成
組件(Component):通常把Component子類及其間接子類創(chuàng)建的對(duì)象稱為一個(gè)組件,Component子類及其間接子類定義了所有的圖形用戶界面元素及常用方法,大多數(shù)組件都是從抽象類Component派生而來(lái)的。容器(Container):把Container子類或其間接子類創(chuàng)建的對(duì)象稱為一個(gè)容器,容器類用于包含組件,也可以包含容器以便統(tǒng)一操作和管理。
在容器中可以設(shè)定它所包含組件的布局方式。
組件必須被包含到容器中。
布局管理器(Layouts):用于規(guī)定與用戶接口的所有組件在屏幕上如何布置,做到與平臺(tái)無(wú)關(guān)Swing是什么?
Swing組件是一系列圖形用戶界面的控件的集合,而在Swing之前是AWT組件。在AWT組件中也有一系列的控件,那么為什么有了AWT組件,又要誕生Swing呢?
因?yàn)锳WT控件是由C或者C++實(shí)現(xiàn)的,這些組件稱為重組件,而Java組件是由Java語(yǔ)言實(shí)現(xiàn)的,稱為輕組件。
之所以說(shuō)AWT組件為重組件,是因?yàn)榭丶拈_(kāi)發(fā)語(yǔ)言和Java語(yǔ)言不一樣,牽扯到語(yǔ)言的翻譯,由于語(yǔ)言的不同,效率肯定不高。
而Swing組件是由純Java語(yǔ)言實(shí)現(xiàn)的,不牽扯到語(yǔ)言的兼容,效率自然就高一些,這也是為什么目前基本上都用Swing組件進(jìn)行開(kāi)發(fā)。Swing中GUI類分為三大類:
容器類
JFrame、JPanel、JScrollPane
UI組件類
JLabel、JTextField、JTextArea、JButton
JCheckBox、JRadioButton、JComboBox
幫助類
Color、Font、Dimension
Swing概述——組件顯示
?框架與窗體
創(chuàng)建框架對(duì)象
框架Frame
框架Frame可以作為Java的頂級(jí)窗口來(lái)使用。
Frame是AWT中Window的一個(gè)子類,是帶有標(biāo)題和縮放角的窗口,是屬于重量級(jí)組件。
Frame可以設(shè)置自己的標(biāo)題、邊框、菜單、大小等等 。
默認(rèn)的Frame實(shí)例化對(duì)象都是沒(méi)有大小和不可見(jiàn)的,必須調(diào)用setSize( )來(lái)設(shè)置大小,調(diào)用setVisible(true)來(lái)設(shè)置該窗口為可見(jiàn)的。
Frame的構(gòu)造方法如下:
public Frame( )
public Frame(String?title)
框架Frame類結(jié)構(gòu)
?框架對(duì)象的創(chuàng)建及常用方法
Frame frame = new Frame(“Hello out There!”);
frame.setSize(500,200); //設(shè)置窗體大小
frame. setBackground(Color.red); //設(shè)置背景色
frame.setVisible(true); //設(shè)置窗體可見(jiàn)
創(chuàng)建Swing窗體對(duì)象
Swing窗體JFrame
Swing框架JFrame也可以作為Java的頂級(jí)窗口來(lái)使用,本身也是一個(gè)容器。
JFrame是Swing包中Window類的一個(gè)子類,是帶有標(biāo)題和縮放角的窗口。
JFrame可以設(shè)置自己的標(biāo)題、邊框、菜單、大小等等 。
默認(rèn)的JFrame實(shí)例化對(duì)象都是沒(méi)有大小和不可見(jiàn)的,必須調(diào)用setSize( )來(lái)設(shè)置大小,調(diào)用setVisible(true)來(lái)設(shè)置該窗口為可見(jiàn)的。
窗體JFrame的構(gòu)造函數(shù):
public JFrame( )
public JFrame(String?title)
Swing窗體JFrame 類結(jié)構(gòu)
?Swing 窗體對(duì)象的創(chuàng)建
方法一:直接創(chuàng)建JFrame類對(duì)象,該對(duì)象就是一個(gè)窗體
JFrame? frame = new JFrame(“Hello World!”);
frame.setSize(500,200);??? //設(shè)置窗體大小
frame. getContentPane()
. setBackground(Color.blue);?? //設(shè)置背景色
frame.setVisible(true); ?? ?? //設(shè)置窗體可見(jiàn)
方法二:定義一個(gè)類 該類繼承JFrame類,那么該類創(chuàng)建的對(duì)象也是一個(gè)窗體對(duì)象
class MyWindow extends JFrame{
public MyWindow(String str){
super(str);
setSize(500,200); //設(shè)置窗體大小
getContentPane().setBackground(
Color.orange); //設(shè)置背景色
setVisible(true); //設(shè)置窗體可見(jiàn)
}
}
?窗體對(duì)象常用屬性
frame. setTitle("這是新窗口名字") ? ? ? ? ? ? ? //重新設(shè)置窗體的名字
frame.setLocation (300,400);? ? ? ? //設(shè)置窗體起始位置,單位為像素
frame.setResizable(true);???? //設(shè)置窗體是否可調(diào)整大小
frame.setVisible(true);???? //設(shè)置窗體可見(jiàn)
設(shè)置布局對(duì)象
frame.setLayout(new XXXLayout());
//布局對(duì)象類型有很多類型,常用類型有如下類型
/*
?*FlowLayout:
?*BorderLayout:
?*BoxLayout:
?*GridBagLayout:
?*null:
?*/
常用組件——文本組件
JLabel
?對(duì)象的創(chuàng)建
JLabel lbl=new JLabel("這是標(biāo)簽組件,可顯示文字");
lbl.setFont(new Font("楷體",Font.BOLD,20));
//三個(gè)參數(shù)分別是名稱、樣式、磅值
add(lbl);
JTextField
?對(duì)象創(chuàng)建
JTextField txt=new JTextField(“這是文本框”,20);
add(txt);
JPasswordField
?對(duì)象創(chuàng)建
JPasswordField password=new JPasswordField(20);
add(password);
JTextArea
?Jlist文本列表組件
?常用組件——選擇組件
JButton組件
?對(duì)象的創(chuàng)建
JButton button = new JButton("確定");
add(button);
效果
?JCheckBox組件
JCheckBox checkBox1 = new JCheckBox("喜歡音樂(lè)");
add.(checkBox1 );
JRadioButton組件常用方法介紹
ButtonGroup
單選按鈕同一時(shí)刻只能選中其中之一,為了將若干個(gè)單選按鈕設(shè)置為邏輯上的一組,需要單選按鈕組——ButtonGroup。
單選按鈕組不需要在窗體上定位,只需要將若干個(gè)單選按鈕加入其中就可以了。當(dāng)然,每個(gè)單選按鈕需要在窗體上定位。
對(duì)象的創(chuàng)建
ButtonGroup group = new ButtonGroup();
JRadioButton radio1 = new JRadioButton("男"); //單選按鈕
JRadioButton radio2 = new JRadioButton("女");
group.add(radio1); //需將單選按鈕加到按鈕組中
group.add(radio2); //才能實(shí)現(xiàn)一組單選功能
add(radio1);
add(radio2);
JComBox組件
?對(duì)象的創(chuàng)建
JComboBox jcb=new JComboBox();//創(chuàng)建對(duì)象
jcb.addItem("中北大學(xué)"); //添加下拉表項(xiàng)
jcb.addItem("山西大學(xué)");
jcb.addItem("理工大學(xué)");
jcb.addItem("財(cái)經(jīng)大學(xué)");
add(jcb);
表格組件
JTable類
創(chuàng)建的對(duì)象是類似表結(jié)構(gòu),該組件以行和列的形式顯示數(shù)據(jù),允許用戶對(duì)表格中的數(shù)據(jù)進(jìn)行編輯。允許用二維數(shù)組來(lái)創(chuàng)建表格,表格中顯示的內(nèi)容其實(shí)就是該二維數(shù)組中的內(nèi)容。具體使用請(qǐng)參考API文檔。
JTable類構(gòu)造方法
JTable(Object[][]?rowData, Object[]?columnNames)
//構(gòu)造一個(gè) JTable 來(lái)顯示二維數(shù)組 rowData 中的值,其列名稱為 columnNames。
?常用布局
FlowLayout:流式布局
FlowLayout類創(chuàng)建的對(duì)象稱為流式布局,是JPanel及其子類創(chuàng)建的容器對(duì)象的默認(rèn)布局。
該布局中組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從從左向右排列,組件之間的默認(rèn)水平和垂直間隙是5個(gè)像素,組件大小為默認(rèn)的最佳大小。
FlowLayout flowLayout = new FlowLayout();
//創(chuàng)建一個(gè)流式布局對(duì)象。
con.setLayout(flowLayout); //設(shè)置某容器為流式布局,
// 其它容器設(shè)置布局相似
BorderLayout:邊框布局
邊框布局分為東、南、西、北、中五個(gè)區(qū),在將指定的控件添加到指定區(qū)域時(shí),采用BorderLayout調(diào)用相應(yīng)區(qū)域常量的方式,來(lái)指定控件的顯示區(qū)域。
五個(gè)區(qū)域的常量值:
BorderLayout.NORTH:北區(qū)。
BorderLayout.SOUTH:南區(qū)。
BorderLayout.EAST:東區(qū)。
BorderLayout.WEST:西區(qū)。
BorderLayout.CENTER:中間區(qū)
GridLayout:網(wǎng)格布局
GridLayout gridLayout = new GridLayout(3,3);
//創(chuàng)建一個(gè)三行三列的表格布局對(duì)象。
網(wǎng)格布局對(duì)象,是以二維矩陣行,列的方式來(lái)定位容器區(qū)域,然后將指定的控件放置在指定的網(wǎng)格。
網(wǎng)格布局的用法中重要的參數(shù)就是表示行和列的兩個(gè)整數(shù),創(chuàng)建網(wǎng)格布局對(duì)象的語(yǔ)法,如圖:
BoxLayout:箱式布局
BoxLayout 可以把控件依次進(jìn)行水平或者垂直排列布局,這是通過(guò)參數(shù) X_AXIS、Y_AXIS 來(lái)決定的。
X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的構(gòu)造函數(shù)有兩個(gè)參數(shù),一個(gè)參數(shù)定義使用該 BoxLayout 的容器,另一個(gè)參數(shù)是指定 BoxLayout 是采用水平還是垂直排列。
JPanel panel=new JPanel();
BoxLayout layout=new
BoxLayout(panel, BoxLayout.X_AXIS);
//按照水平排列方式添加控件到容器,
//BoxLayout.Y_AXIS為按照垂直排列方式添加控件。
panel.setLayout(layout);
panel.add(component);
?自定義布局
通過(guò)調(diào)用setLayout(null)時(shí),將容器的布局對(duì)象設(shè)置為null時(shí),就可以采用自定義布局方式,來(lái)實(shí)現(xiàn)窗體的控件的布局。
自定義布局方式下,可以用數(shù)值控制控件的擺放位置,其實(shí)就是絕對(duì)定位,而采用的方式是通過(guò)控件調(diào)用setBounds(x,y,width,height),從而在容器的指定區(qū)域進(jìn)行自定義繪制。
事件處理機(jī)制
GUI事件響應(yīng)機(jī)制概述
圖形用戶界面通過(guò)事件機(jī)制響應(yīng)用戶和程序的交互。如當(dāng)用戶單擊某個(gè)按鈕時(shí)就會(huì)產(chǎn)生動(dòng)作事件,該按鈕就是事件源。
要處理產(chǎn)生的事件,需要在特定的方法中編寫(xiě)處理事件的程序。這樣,當(dāng)產(chǎn)生某種事件時(shí)就會(huì)調(diào)用處理這種事件的方法,從而實(shí)現(xiàn)用戶與程序的交互,這就是圖形用戶界面事件處理的基本原理。
事件響應(yīng)過(guò)程中涉及到三類對(duì)象(或稱三要素)
Event Source-事件源:事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕Button 。
Event-事件:每個(gè)事件都對(duì)應(yīng)Java中的一個(gè)類。例如鍵盤(pán)操作對(duì)應(yīng)的事件類是KeyEvent。
Event handler-事件處理者。接收事件對(duì)象并對(duì)其進(jìn)行處理的對(duì)象。
事件監(jiān)聽(tīng)器
事件監(jiān)聽(tīng)器,即事件處理者,是實(shí)現(xiàn)了事件接口的類對(duì)象。是指能夠處理相應(yīng)類型事件的對(duì)象,該對(duì)象之所以能夠處理指定的某種類型的事件,是因?yàn)楸O(jiān)聽(tīng)器類實(shí)現(xiàn)了指定事件的接口。當(dāng)對(duì)組件(事件源)注冊(cè)了事件監(jiān)聽(tīng)器后, 若該事件源上有某個(gè)動(dòng)作觸發(fā)了某個(gè)事件,JVM將自動(dòng)調(diào)用該監(jiān)聽(tīng)器中對(duì)應(yīng)的方法響應(yīng)這個(gè)事件,如果沒(méi)有注冊(cè)事件監(jiān)聽(tīng)器,則不能自己響應(yīng)事件。
Java規(guī)定:為了讓監(jiān)視器這個(gè)對(duì)象能對(duì)事件源發(fā)生的事件進(jìn)行處理,創(chuàng)建該監(jiān)視器對(duì)象的類必須聲明實(shí)現(xiàn)相應(yīng)的事件類接口,那么當(dāng)事件源發(fā)生事件時(shí),監(jiān)視器就自動(dòng)調(diào)用被類重寫(xiě)的某個(gè)接口方法進(jìn)行事件處理。事件源——窗體上的組件(按鈕)
事件處理者(事件監(jiān)聽(tīng)器)——實(shí)現(xiàn)了XXX事件接口的類對(duì)象(Java將各類事件封裝成了類,比如點(diǎn)擊事件,鼠標(biāo)事件,選擇列表選項(xiàng)事件等,要監(jiān)聽(tīng)哪類事件就實(shí)現(xiàn)哪類事件接口)
注冊(cè)事件監(jiān)聽(tīng)器(委托給第三方處理)——事件源調(diào)用addXXXListener(監(jiān)視器) 方法來(lái)注冊(cè)監(jiān)聽(tīng)器,完成委托。
ActionEvent事件
文本框、按紐、菜單項(xiàng)、密碼框和單選按紐都可以觸發(fā)ActionEvent事件,即都可以成為ActionEvent事件的事件源。
能觸發(fā)ActionEvent事件的組件,通過(guò)使用??? addActionListener(ActionListener listen),可以將實(shí)現(xiàn)了ActionListener接口的類對(duì)象注冊(cè)為事件源的監(jiān)視器。
事件源加入事件響應(yīng)方法
ActionListener接口在java.awt.event包中,該接口中只有一個(gè)方法:public void actionPerformed(ActinEvent e) 事件源觸發(fā)ActionEvent事件后,監(jiān)視器將發(fā)現(xiàn)觸發(fā)的ActionEvent事件,然后調(diào)用接口中的方法:actionPerformed(ActinEvent e)對(duì)發(fā)生的事件作出處理。JVM事先創(chuàng)建的ActionEvent類事件對(duì)象就會(huì)同時(shí)傳遞給該方法的參數(shù)e。 ?
方法一:用匿名類對(duì)象做監(jiān)視器文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-461911.html
btreset.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//事件源點(diǎn)擊后要執(zhí)行的操作代碼(如:清空)
}
});//實(shí)現(xiàn)了ActionListener接口的匿名類對(duì)象做參數(shù)
//(事件處理者)
方法二:專門(mén)定義事件處理類,用該對(duì)象做監(jiān)視器文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-461911.html
//定義事件處理類
class Reset implements ActionListener{
@Override
public void actionPerformed(ActionEvent e)
{
//事件源點(diǎn)擊后要執(zhí)行的操作代碼(如:清空)
}
}
btreset.addActionListener(new Reset ());
//實(shí)現(xiàn)了ActionListener接口的類對(duì)象做參數(shù)(事件//處理者)
到了這里,關(guān)于java 圖形用戶界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!