黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java圖形界面的組成

Java圖形界面的組成

更新時(shí)間:2022-04-29 10:46:32 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2321次

很多小伙伴對(duì)Java圖形界面的組成還不是了解,動(dòng)力節(jié)點(diǎn)小編就來(lái)為大家講解一下。我們?cè)谄綍r(shí)生活中用電腦的時(shí)候,我們可以發(fā)現(xiàn)我們所運(yùn)行的所有的程序基本都是在某一個(gè)窗口中運(yùn)行。這個(gè)窗口可以實(shí)現(xiàn)我們和程序的交互,可以讓一個(gè)程序更加的精彩和多元。實(shí)際上現(xiàn)在我們所用的很多操作系統(tǒng)都是以窗體為基礎(chǔ)實(shí)現(xiàn)自己程序或者軟件的功能。

實(shí)際上我們經(jīng)常使用的MicroSoft Windows系統(tǒng)中的“Windows”就是“窗口”的意思。

1.Java提供的圖形界面組件

(1)AWT組件

AWT(Abstract Window Toolkit),中文譯為抽象窗口工具包,該包提供了一套與本地圖形界面進(jìn)行交互的接口,是Java提供的用來(lái)建立和設(shè)置Java的圖形用戶界面的基本工具。AWT中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對(duì)應(yīng)的關(guān)系,稱之為peers,當(dāng)利用AWT編寫圖形用戶界面時(shí),實(shí)際上是在利用本地操作系統(tǒng)所提供的圖形庫(kù)。由于不同 操作系統(tǒng)的圖形庫(kù)所提供的樣式和功能是不一樣的,在一個(gè)平臺(tái)上存在的功能在另一個(gè)平臺(tái)上則可能不存在。為了實(shí)現(xiàn)Java語(yǔ)言所宣稱的“一次編寫,到處運(yùn)行(write once, run anywhere)”的概念,AWT不得不通過(guò)犧牲功能來(lái)實(shí)現(xiàn)平臺(tái)無(wú)關(guān)性,也即AWT所提供的圖形功能是各種操作系統(tǒng)所提供的圖形功能的交集。

AWT組件是Java在JDK1.0時(shí)期推出的圖形界面類,也是整個(gè)Java中最基本的圖形界面類,是一切圖形界面的基礎(chǔ)。我們把AWT組件稱為重量級(jí)組件。因?yàn)檫@些組件的實(shí)現(xiàn)是調(diào)用了操作系統(tǒng)底層的繪圖函數(shù)。也就是說(shuō)AWT組件類與操作系統(tǒng)有著密切的聯(lián)系。

(2)SWING組件

如上所述,Java的圖形界面組件類致力于“一次編寫,到處運(yùn)行”,也就是跨操作平臺(tái)運(yùn)行。而AWT組件卻和操作系統(tǒng)的底層繪圖函數(shù)緊密聯(lián)系,這就直接導(dǎo)致了AWT組件不得不犧牲一部分功能來(lái)實(shí)現(xiàn)跨平臺(tái)。

Java為了解決這個(gè)問(wèn)題,他們?cè)贘DK1.4的時(shí)候推出了SWING這套采用純Java代碼編寫的輕量級(jí)組件。也就是說(shuō),這條組件僅僅是以AWT為基礎(chǔ),與操作系統(tǒng)沒(méi)有直接的聯(lián)系。SWING組件很好的實(shí)現(xiàn)了Java的跨平臺(tái)性,也是我們以后使用的最主要的組件類。

(3)JavaFX組件

JavaFX是JDK1.7的時(shí)候推出的圖形界面組件類。這里不過(guò)多介紹。

2.常用的組件類

(1)容器組件類

所謂容器,就是類似于收納盒、包、鍋碗瓢盆等可以容納東西的物體。類似地,容器組件就是指可以容納其他組件的組件,最典型的就是我們經(jīng)常看到的窗口(窗體)組件。

JFrame是SWING包下的頂級(jí)容器組件類。所謂頂級(jí)容器,就是說(shuō)它只能裝別的組件,而不能被其他組件所包含。JFrame的作用就是實(shí)現(xiàn)一個(gè)基本的窗口以及其開(kāi)關(guān)。調(diào)整大小等作用。

JPanel是SWING包下的一個(gè)容器組件,我們稱之為“面板”,可以加在窗體上以實(shí)現(xiàn)我們想要的各種布局。

(2)元素組件類

元素組件就是想按鈕、標(biāo)簽、復(fù)選框等的一類實(shí)現(xiàn)某種具體功能的組件。我們經(jīng)常使用的有以下幾種:

JLabel 標(biāo)簽元素組件類 顯示文字或者圖片

JTextField 文本輸入框元素組件類 接收輸入信息,將輸入信息顯示出來(lái)

JPasswordField 密碼輸入框元素組件類 接收輸入信息,將輸入的信息以某個(gè)符號(hào)代替顯 示

JCheckBox 復(fù)選框(多選框)元素組件類 首先又一個(gè)選擇框,在選擇框后還能顯示文字或 者圖片信息

JButton 按鈕元素組件類 顯示文字或圖片,提供一個(gè)點(diǎn)擊效果

(3)輔助類

輔助類就是那些有助于我們優(yōu)化界面或者幫助某個(gè)組件完成功能的類。典型的常用的類有如下幾個(gè):

javax.swing.ImageIcon 圖標(biāo)類。將磁盤上的圖片文件加載到程序中。

java.awt.FlowLayout 流式布局類。流式布局類似word文檔(所有的布局類都只能應(yīng)用于容器組件上) 在java.awt和javax.swing包下所有以Layout結(jié)尾的類都是布局類

java.awt.Dimension 封裝類。用來(lái)封裝組件的寬度和高度

BorderLayout 邊框布局。把容器分為上北下南左西右東中間五個(gè)部分,這五個(gè)部分的組成如下:

我們可以對(duì)邊框布局的五個(gè)部分進(jìn)行大小的設(shè)置。從上圖中我們可以看到對(duì)于南北兩個(gè)部分我們只能設(shè)置它的高度,它的寬度和窗體的寬度是一致的;對(duì)于東西兩個(gè)部分我們可以設(shè)置它的寬度,它的高度有嫩被兩個(gè)部分以及窗體的高度決定;對(duì)于中部,我們可以直接設(shè)置它的長(zhǎng)寬。

3.實(shí)例——登錄界面的實(shí)現(xiàn)

(1)定義一個(gè)“login”類,這個(gè)類帶有初始化界面的方法和主函數(shù)

(2)在主函數(shù)中,實(shí)例化Login類的對(duì)象,然后用對(duì)象名來(lái)調(diào)用初始化界面的方法。

(3)在初始化界面的方法中,實(shí)例化JFrame窗體容器組件類的對(duì)象。

(4)設(shè)置窗體容器組件對(duì)象的屬性值:標(biāo)題、大小、顯示位置、關(guān)閉操作、布局、可見(jiàn)、...

以上四步代碼如下:

package test;
import java.awt.Color;
import javax.swing.JFrame;
public class Login {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Login l = new Login();//實(shí)例化一個(gè)Login對(duì)象。
		l.initUI();//調(diào)用初始化窗體的方法。
	}
	public void initUI(){
		javax.swing.JFrame frame = new javax.swing.JFrame();//實(shí)例化一個(gè)窗體對(duì)象
		frame.setTitle("登陸界面");//設(shè)置窗體的標(biāo)題
		frame.setSize(800,800);//設(shè)置窗體的大小
		frame.setLocationRelativeTo(null);//設(shè)置窗體的位置為居中
		frame.setResizable(false);//設(shè)置不可調(diào)節(jié)大小
		frame.setDefaultCloseOperation(3);//設(shè)置窗體的關(guān)閉操作。這個(gè)方法有0 1 2 3四個(gè)返回值。其中0是指不關(guān)閉,也就是說(shuō)無(wú)論點(diǎn)擊多少次關(guān)閉按鈕都不會(huì)有反應(yīng)。1是指點(diǎn)擊關(guān)閉按鈕會(huì)關(guān)閉這個(gè)窗體但是程序依然在后臺(tái)運(yùn)行。2是指如果有多個(gè)窗體就關(guān)閉當(dāng)前窗體,如果只有一個(gè)則關(guān)閉程序。3是指直接關(guān)閉程序。
		frame.setBackground(Color.LIGHT_GRAY);//設(shè)置窗體的背景顏色
		frame.setVisible(true);//設(shè)置窗體可見(jiàn)。如果不設(shè)置這一步那么窗體看不見(jiàn)。另外所有的組建都要加在這個(gè)方法之前,否則不可見(jiàn)。
	}
}

這時(shí)候運(yùn)行該程序的效果如下:

(5)實(shí)例化元素組件對(duì)象并添加到窗體上:

package test;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
public class Login {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Login l = new Login();//實(shí)例化一個(gè)Login對(duì)象。
		l.initUI();//調(diào)用初始化窗體的方法。
	}
	public void initUI(){
		javax.swing.JFrame frame = new javax.swing.JFrame();//實(shí)例化一個(gè)窗體對(duì)象
		frame.setTitle("登陸界面");//設(shè)置窗體的標(biāo)題
		frame.setSize(800,800);//設(shè)置窗體的大小
		frame.setLocationRelativeTo(null);//設(shè)置窗體的位置為居中
		frame.setResizable(false);//設(shè)置不可調(diào)節(jié)大小
		frame.setDefaultCloseOperation(3);//設(shè)置窗體的關(guān)閉操作。這個(gè)方法有0 1 2 3四個(gè)返回值。其中0是指不關(guān)閉,也就是說(shuō)無(wú)論點(diǎn)擊多少次關(guān)閉按鈕都不會(huì)有反應(yīng)。1是指點(diǎn)擊關(guān)閉按鈕會(huì)關(guān)閉這個(gè)窗體但是程序依然在后臺(tái)運(yùn)行。2是指如果有多個(gè)窗體就關(guān)閉當(dāng)前窗體,如果只有一個(gè)則關(guān)閉程序。3是指直接關(guān)閉程序。
		frame.setBackground(Color.LIGHT_GRAY);//設(shè)置窗體的背景顏色
		javax.swing.ImageIcon image = new javax.swing.ImageIcon("C:\\Users\\Apple\\Pictures\\Saved Pictures\\冠軍.jpg");//實(shí)例化一個(gè)圖片對(duì)象,并引用圖片路徑
		javax.swing.JLabel Limage = new javax.swing.JLabel(image);//實(shí)例化一個(gè)標(biāo)簽對(duì)象,并把上面的圖片對(duì)象添加上去。
		frame.add(Limage);//在窗體上添加標(biāo)簽
		javax.swing.JLabel Lname = new javax.swing.JLabel("賬號(hào):");//實(shí)例化一個(gè)標(biāo)簽對(duì)象并調(diào)整字體、大小
		Lname.setFont(new Font("楷體",Font.BOLD,20));
		frame.add(Lname);//添加到面板,下同
		javax.swing.JTextField Tname = new javax.swing.JTextField();//實(shí)例化一個(gè)文本輸入框?qū)ο蟛⒄{(diào)整大小
		java.awt.Dimension dim = new java.awt.Dimension(300,30);
		Tname.setPreferredSize(dim);
		frame.add(Tname);
		javax.swing.JLabel Lcode = new javax.swing.JLabel("密碼:");//實(shí)例化一個(gè)標(biāo)簽對(duì)象并調(diào)整字體、大小
		Lcode.setFont(new Font("楷體",Font.BOLD,20));
		frame.add(Lcode);
		javax.swing.JPasswordField Pcode = new javax.swing.JPasswordField();//實(shí)例化一個(gè)密碼輸入框?qū)ο蟛⒄{(diào)整大小
		java.awt.Dimension Pdim = new java.awt.Dimension(300,30);
		Pcode.setPreferredSize(Pdim);
		frame.add(Pcode);
		javax.swing.JCheckBox C1 =new javax.swing.JCheckBox("記住密碼");//實(shí)例化一個(gè)復(fù)選框?qū)ο蟛⒄{(diào)整字體、大小
		C1.setFont(new Font("楷體",Font.BOLD,20));
		frame.add(C1);
		javax.swing.JCheckBox C2 = new javax.swing.JCheckBox("自動(dòng)登錄");//實(shí)例化一個(gè)復(fù)選框?qū)ο蟛⒄{(diào)整字體、大小
		C2.setFont(new Font("楷體",Font.BOLD,20));
		frame.add(C2);
		javax.swing.JButton Blogin = new javax.swing.JButton("登錄");//實(shí)例化一個(gè)按鈕對(duì)象并調(diào)整字體、大小
		Blogin.setPreferredSize(new java.awt.Dimension(300,40));
		Blogin.setFont(new Font("楷體",Font.BOLD,20));
		frame.add(Blogin);
		frame.setVisible(true);//設(shè)置窗體可見(jiàn)。如果不設(shè)置這一步那么窗體看不見(jiàn)。另外所有的組建都要加在這個(gè)方法之前,否則不可見(jiàn)。
	}
}

看起來(lái)好像加齊了,我們運(yùn)行試一試:

好大一個(gè)登錄按鈕!!!!!

這是為什么?

JFrame窗體的默認(rèn)布局是邊框布局,也就是說(shuō)我們前面要加的東西確實(shí)已經(jīng)加上去了,但是被一層一層覆蓋掉了。所以這個(gè)時(shí)候我們就需要設(shè)置一下窗體的布局。我們可以把窗體設(shè)置成流式布局(FlowLayout)

java.awt.FlowLayout 流式布局類。流式布局類似word文檔(所有的布局類都只能應(yīng)用于容器組件上)我們給上面加一段代碼:

java.awt.FlowLayout fl = new java.awt.FlowLayout();
//實(shí)例化一個(gè)布局對(duì)象
frame.setLayout(fl);調(diào)用這個(gè)對(duì)象

這段代碼要加在上面設(shè)置背景顏色之后。

加上這段代碼我們?cè)賮?lái)一次:

是不是好了很多?

4.優(yōu)化上述登錄界面

上面我們成功地做出來(lái)了一個(gè)登錄界面。但是 ··· 是不是還是不夠漂亮?我們想一下,某社交軟件的登錄界面是怎樣的?是不是頭像占據(jù)了兩行的位置,它的右邊是賬號(hào)密碼?這個(gè)好像在流式布局中樹沒(méi)辦法實(shí)現(xiàn)的啊。

于是,我們就要用到“東西南北中”的邊框布局和“JPanel”面板了。

我們快同意根據(jù)自己的需要把JPanel面板對(duì)象加在邊框布局的任何一部分里。而邊框布局的每一個(gè)部分之中是默認(rèn)的流式布局,面板中默認(rèn)也是流式布局。這樣一想,我們是不是就可以把那些元素組件單獨(dú)的放在幾個(gè)面板里面調(diào)整它們的大小屬性,一球更加精致的界面了呢?

注意,下面不在將元素組件加在窗體上,而是加在面板上。

import java.awt.Font;
public class Login {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Login l = new Login();
		l.initUI();
	}
public void initUI() {
	javax.swing.JFrame frame = new javax.swing.JFrame();//初始化窗體結(jié)構(gòu)
	frame.setTitle("登錄");
	frame.setSize(800,800);
	frame.setDefaultCloseOperation(3);
	frame.setLocationRelativeTo(null);		
	javax.swing.ImageIcon image = new javax.swing.ImageIcon("C:\\Users\\Apple\\Pictures\\Saved Pictures\\冠軍.jpg");
	javax.swing.JLabel Limage = new javax.swing.JLabel(image);
	frame.add(Limage,java.awt.BorderLayout.NORTH);//上部圖片部分
	javax.swing.JPanel centerPanel = new javax.swing.JPanel();//中部面板設(shè)置
	javax.swing.JLabel Lname = new javax.swing.JLabel("賬號(hào):");
	Lname.setFont(new Font("楷體",Font.BOLD,20));
	centerPanel.add(Lname);//加在面板上?。。。?
	javax.swing.JTextField Tname = new javax.swing.JTextField();
	java.awt.Dimension dim = new java.awt.Dimension(300,30);
	Tname.setPreferredSize(dim);
	centerPanel.add(Tname);//加在面板上?。。?!
	javax.swing.JLabel Lcode = new javax.swing.JLabel("密碼:");
	Lcode.setFont(new Font("楷體",Font.BOLD,20));
	centerPanel.add(Lcode);//加在面板上?。。?!
	javax.swing.JPasswordField Pcode = new javax.swing.JPasswordField();
	java.awt.Dimension Pdim = new java.awt.Dimension(300,30);
	Pcode.setPreferredSize(Pdim);
	centerPanel.add(Pcode);//加在面板上?。。?!
	javax.swing.JCheckBox C1 =new javax.swing.JCheckBox("記住密碼");
	C1.setFont(new Font("楷體",Font.BOLD,20));
	centerPanel.add(C1);//加在面板上?。。?!
	javax.swing.JCheckBox C2 = new javax.swing.JCheckBox("自動(dòng)登錄");
	C2.setFont(new Font("楷體",Font.BOLD,20));
	centerPanel.add(C2);//加在面板上?。。?!
	javax.swing.JButton Blogin = new javax.swing.JButton("登錄");
	Blogin.setPreferredSize(new java.awt.Dimension(300,40));
	Blogin.setFont(new Font("楷體",Font.BOLD,20));
	centerPanel.add(Blogin);//加在面板上!?。?!
	frame.add(centerPanel,java.awt.BorderLayout.CENTER);//中部面板設(shè)置完成
	javax.swing.JPanel westPanel = new javax.swing.JPanel();//設(shè)置左邊的面板
	javax.swing.ImageIcon Icon = new javax.swing.ImageIcon("C:\\Users\\Apple\\Pictures\\Saved Pictures\\隊(duì)標(biāo).jpg");
	westPanel.add(new javax.swing.JLabel(Icon) );//加在面板上?。。?!
	westPanel.setPreferredSize(new java.awt.Dimension(200,0));
	westPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));//流式布局設(shè)置為靠右對(duì)齊
	frame.add(westPanel,java.awt.BorderLayout.WEST);//設(shè)置完成
	javax.swing.JPanel eastPanel = new javax.swing.JPanel();
	eastPanel.setPreferredSize(new java.awt.Dimension(200,0));
	frame.add(eastPanel,java.awt.BorderLayout.EAST);//右邊的面板
	frame.setVisible(true);		
}
}

可以看到,我在上面的窗體上加入了四個(gè)面板,分別放在“東、西、北、中”四個(gè)部分上(邊框布局是窗體的默認(rèn)布局方式,不用單獨(dú)設(shè)置)。下部由于沒(méi)有要加的內(nèi)容,就沒(méi)有設(shè)置面板。

現(xiàn)在我們看看效果怎樣:

現(xiàn)在是不是比上面那個(gè)舒服多了?

現(xiàn)在我們就成功地實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的登錄界面。如果大家想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容從入門到精通,細(xì)致全面,通俗易懂,適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 一级毛片免费毛片毛片 | 欧美成人性色xxxxx视频大 | 鲁丝片一区二区三区毛片 | 日韩avv| 制服丝袜中文字幕在线 | 久久精品亚洲综合 | 日本 国产 欧美 | 亚洲色图综合在线 | 最新中文字幕在线播放 | 校园春色 自拍偷拍 | 亚洲精品国产手机 | 中国女人free性hd国语 | 视频黄色片 | 免费的性爱视频 | 国产久爱青草视频在线观看 | 国产精品久久久久久福利漫画 | 特级淫片aaaaa片毛片 | 色综合久久久高清综合久久久 | 成人18免费网站在线观看 | 一区二区三区免费在线 | 天天干狠狠 | 操你啦在线观看 | 久久免费手机视频 | 久在线| 九月丁香激情综合婷婷玉立 | 国产欧美高清 | 亚洲高清一区二区三区四区 | 丁香六月久久 | 日本一本在线 | 性欧美疯狂猛交69hd | 亚洲日韩欧美综合 | 日韩草逼| 夜夜拍夜夜爽夜夜拍拍拍 | 日韩dv| 9久9久女女热精品视频免费观看 | 久久婷婷一区二区三区 | 噜噜色网 | 亚洲邪恶 | 亚洲国产成人久久综合野外 | 成人无遮挡毛片免费看 | 黄色免费网站在线播放 |