上節(jié)我們聊到GUI(Graphical User Interface)的概念仓蛆,并學(xué)習(xí)GUI編程中主要需掌握兩個(gè)包睁冬,分別是:AWT和Swing,本節(jié)我們會(huì)通過Swing程序中常用的類和控件來實(shí)現(xiàn)第一個(gè)窗口看疙。
javax.swing.JFrame
JFrame在GUI中為一個(gè)窗口對(duì)象豆拨,繼承于Frame。JFrame控件用于在Swing程序中創(chuàng)建窗體能庆。如表1所示施禾,為JFrame常見的構(gòu)造方法。
注意:
Java語言規(guī)定在GUI編程中任何窗口實(shí)例化出來時(shí)默認(rèn)為不可見(即隱藏)狀態(tài)搁胆,所以當(dāng)我們使用構(gòu)造方法實(shí)例化JFrame對(duì)象時(shí)弥搞,是不可見的。
JFrame中還包含了展示窗體和很多對(duì)窗體屬性(如大小渠旁、顏色等)進(jìn)行設(shè)置的方法攀例,如表2所示。
了解了JFrame類常用的構(gòu)造方法和成員方法后顾腊,接下來我們使用一個(gè)示例來創(chuàng)建一個(gè)簡單的窗口粤铭,如示例1所示。
【示例1】創(chuàng)建一個(gè)簡單的窗口
packagecn.sxt.views.testjframe;
importjava.awt.Color;
importjavax.swing.JFrame;
publicclassJFrameDemo1{
publicstaticvoidmain(String[ ]args) {
JFramef=newJFrame();//創(chuàng)建一個(gè)新窗體
f.setSize(500,400);//設(shè)置窗體大小
f.setVisible(true);//設(shè)置窗體可見
f.setBackground(Color.black);//設(shè)置顏色無效
}
}
如上杂靶,main方法中的第一行代碼實(shí)例化了一個(gè)窗口對(duì)象梆惯,第二行代碼設(shè)置窗口的尺寸(注意:尺寸的定位為像素),因?yàn)榇翱谀J(rèn)為不可見伪煤,所以第三行代碼設(shè)置讓窗口可見加袋。在JFrame中還有一個(gè)show()方法也可以讓窗口可見,但是不推薦使用抱既,因?yàn)閟how()只能讓窗口可見职烧,但是setVisible如果傳入?yún)?shù)true則窗口可見,傳入?yún)?shù)false則窗口不可見,所以setVisible方法比show方法更加靈活蚀之。
示例1的執(zhí)行結(jié)果如圖所示:
另外我們發(fā)現(xiàn)使用setBackground方法改變窗體顏色在JFrame中無效蝗敢,因?yàn)樵摲椒ㄊ抢^承于Frame的。在JFrame要用:JFrame.getContentPane().setBackground(Color.bule); 如示例2所示足删。
【示例2】改變窗體的顏色
packagecn.sxt.views.testjframe;
importjava.awt.Color;
importjavax.swing.JFrame;
publicclassJFrameDemo2{
publicstaticvoidmain(String[ ]args) {
JFramef=newJFrame();//創(chuàng)建一個(gè)新窗體
f.setSize(500,400);//設(shè)置窗體大小
f.setVisible(true);//設(shè)置窗體可見
//f.setBackground(Color.blue);//設(shè)置顏色無效
//若要使用JFrame改變窗體的顏色寿谴,需要使用該方法
f.getContentPane().setBackground(Color.black);
}
}
執(zhí)行結(jié)果如圖所示:
上述兩個(gè)示例中創(chuàng)建的窗體默認(rèn)是可以由用戶調(diào)整大小的,如果我們不想讓窗口的大小隨意調(diào)整失受,并且將創(chuàng)建窗體的代碼進(jìn)行封裝讶泰,可以使用示例3中的代碼。
【示例3】創(chuàng)建不可調(diào)整大小的窗體
packagecn.sxt.views.testjframe;
importjavax.swing.JFrame;
classJFrameDemo3extendsJFrame {
publicJFrameDemo3() {
init();
}
//該方法對(duì)窗口做初始化
privatevoidinit() {
//設(shè)置窗口標(biāo)題欄上信息
this.setTitle("第一個(gè)窗口");
//設(shè)置窗口大小為寬:500拂到,高:400
this.setSize(500, 400);
//設(shè)置窗口不能被調(diào)整大小
this.setResizable(false);
//設(shè)置窗口可見
this.setVisible(true);
}
}
publicclassTest {
publicstaticvoidmain(String[ ]args) {
//調(diào)用JFrameDemo3的構(gòu)造方法創(chuàng)建并顯示窗體
newJFrameDemo3();
}
}
執(zhí)行結(jié)果如圖所示:
但是細(xì)心的讀者會(huì)發(fā)現(xiàn)痪署,該窗口關(guān)閉時(shí),應(yīng)用程序并沒有結(jié)束兄旬。這是因?yàn)镴ava規(guī)定:窗口默認(rèn)的關(guān)閉模式只是不可見狼犯,這就導(dǎo)致我們關(guān)閉一個(gè)窗口時(shí),窗口其實(shí)是隱藏了领铐,而不是程序結(jié)束了悯森,所以要解決這個(gè)問題,需要在init()方法中this.setVisible(true);這句代碼之前添加this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 這個(gè)方法绪撵,該方法的功能是設(shè)置窗口的關(guān)閉模式瓢姻,它的形參為int型,而JFrame已經(jīng)為各種不同的關(guān)閉模式設(shè)置了常量莲兢,JFrame.EXIT_ON_CLOSE 的意思就是關(guān)閉時(shí)退出應(yīng)用程序汹来,此外常見的其他常量還有:JFrame.DISPOSE_ON_CLOSE(該常量的意思為:關(guān)閉時(shí)退出該窗口),JFrame.DO_NOTHING_ON_CLOSE (該常量的意思為:關(guān)閉時(shí)不做任何處理)等改艇。
但是在寫init()方法時(shí)收班,建議將setVisible方法寫在init方法中的最后一句,窗口設(shè)置完畢后再讓窗口顯示谒兄。調(diào)整JFrameDemo3中的代碼如示例4所示摔桦。
【示例4】設(shè)置窗體的關(guān)閉模式
classJFrameDemo3extendsJFrame {
publicJFrameDemo3() {
init();
}
//該方法對(duì)窗口做初始化
privatevoidinit() {
//設(shè)置窗口標(biāo)題欄上信息
this.setTitle("第一個(gè)窗口");
//設(shè)置窗口大小為寬:500,高:400
this.setSize(500, 400);
//設(shè)置窗口不能被調(diào)整大小
this.setResizable(false);
//關(guān)閉窗口時(shí)承疲,程序結(jié)束
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//設(shè)置窗口可見
this.setVisible(true);
}
}
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記邻耕。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn)燕鸽,曾在神州數(shù)碼兄世、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師啊研、高級(jí)工程師御滩、架構(gòu)師鸥拧。精通Java平臺(tái)軟件開發(fā),精通JAVAEE削解,熟悉各種流行開發(fā)框架富弦。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫從入門到精通
C-手刃移動(dòng)前端和Web前端
D-J2EE從了解到實(shí)戰(zhàn)
E-Java高級(jí)框架精解
F-Linux和Hadoop