- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java Swing最詳細基礎知識總結
Swing 是一個(gè)為Java設計的GUI工具包。
Swing是JAVA基礎類(lèi)的一部分。
Swing包括了圖形用戶(hù)界面(GUI)器件如:文本框,按鈕,分隔窗格和表。
Swing提供許多比AWT更好的屏幕顯示元素。它們用純Java寫(xiě)成,所以同Java本身一樣可以跨平臺運行,這一點(diǎn)不像AWT。它們是JFC的一部分。它們支持可更換的面板和主題(各種操作系統默認的特有主題),然而不是真的使用原生平臺提供的設備,而是僅僅在表面上模仿它們。這意味著(zhù)你可以在任意平臺上使用JAVA支持的任意面板。輕量級組件的缺點(diǎn)則是執行速度較慢,優(yōu)點(diǎn)就是可以在所有平臺上采用統一的行為。
從上圖可以看出各組件之間的繼承關(guān)系,我們可以看到Container類(lèi)下面有四個(gè)子類(lèi),這四個(gè)子類(lèi)中,除了JComponent類(lèi)以外,其余三個(gè)都是Java AWT包中的類(lèi),而JComponent是Java Swing所出現的類(lèi)。Sun公司在設計Java Swing時(shí)用JComponent把容器和組件之間由Java AWT過(guò)渡到Java Swing,也就是說(shuō)大部分Java Swing中的容器和組件都繼承JComponent類(lèi)。
Container類(lèi)除了JComponent類(lèi)之外,其余三個(gè)都是Java AWT中的容器,需要注意的是容器又分為頂級容器和中間容器。頂級容器是指圖形界面最外層的容器,如窗口(Window)。中間容器是指存放在頂級容器或者中間容器中的一種容器,如面板(Panel)。在實(shí)際編程中,要開(kāi)發(fā)一個(gè)界面應該是這樣的,頂級容器在最外面(JFrame),其次是中間容器,放在窗體上(JPanel),最后是基本組件,放在中間容器上。這里需要注意的是,容器中除了可以存放基本組件外,還可以存放容器,如圖所示:
我們經(jīng)常使用的頂級容器是窗體(JFrame)和對話(huà)框(JDialog),使用的中間容器是面板(JPanel)。開(kāi)發(fā)中經(jīng)常使用的基本組件大部分用JComponent類(lèi)下的子類(lèi)。
Component類(lèi)的主要方法有:
(1) void enable():使組件可用。
(2) void disable(): 使組件不可用
(3) void show(): 顯示組件
(4) void paint(): 繪制圖形
(5) void repaint(): 刷新
Container類(lèi)的主要方法有:
(1) void add(Component c):將指定組件加入到容器中。
(2) void setLayout(): 設置布局管理器。
所有的包含組件都可繼承或重載以上方法。
常用的Swing組件如下表所示:
JFrame是獨立于瀏覽器的可獨立運行的主窗口,通常用于開(kāi)發(fā)桌面應用程序/JFrame具有邊界和標題欄設置,其大小可以調整。JFrame中需要加入組件,也可以加入菜單,或在上面繪圖。
JFrame在程序中的語(yǔ)法格式如下:
JFrame jf=new JFrame(title); Container container=jf.getContentPane();
jf:JFrame類(lèi)的對象
container:Container類(lèi)的對象,可以使用JFrame對象調用getContentPane()方法獲取。
我們應該有這樣一個(gè)概念,Swing組件的窗體通常與組件和容器相關(guān),所以在JFrame對象創(chuàng )建完成后,需要調用getContentPane()方法將窗體轉換為容器,然后在容器中添加組件或設置布局管理器。通常,這個(gè)容器用來(lái)包含和顯示組件。如果需要將組件添加至容器,可以使用來(lái)自Cointainer類(lèi)的add()方法進(jìn)行設置。例如:
container.add(new JButton("按鈕");
下面我們就用Java代碼做一個(gè)簡(jiǎn)單的窗體,如下所示:
package xmsj; import java.awt.Color; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.WindowConstants; public class test1 { public static void main(String[] args){ //創(chuàng )建一個(gè)窗體對象 JFrame jf=new JFrame("這是一個(gè)JFrame窗體"); //獲取一個(gè)容器,用來(lái)放置各種組件或布局管理器 Container container=jf.getContentPane(); JLabel jl=new JLabel("這是一個(gè)JFrame窗體"); //創(chuàng )建一個(gè)JLabel標簽 //使標簽上的文字居中 jl.setHorizontalAlignment(SwingConstants.CENTER); //將標簽添加到容器中 container.add(jl); container.setBackground(Color.white); //設置容器的背景顏色 //設置窗體可見(jiàn) jf.setVisible(true); //設置窗體大小 jf.setSize(200,150); //設置窗體關(guān)閉方式 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
顯示如下圖所示:
上面的程序展示了如何創(chuàng )建一個(gè)簡(jiǎn)單的窗體,JFrame還有其想對應的方法,如下所示:
JFrame組件中提供了如下兩個(gè)常用的構造方法:
(1)JFrame():創(chuàng )建一個(gè)沒(méi)有窗口標題的窗口框架。
(2)JFrame(String):創(chuàng )建一個(gè)指定窗口標題的窗口框架。
JFrame的主要方法如下表所示:
JDialog窗體是Swing組件中的對話(huà)框,它繼承了AWT組件中的java.awt.Dialog類(lèi)。
對話(huà)框(JDialog)與框架(JFrame)有一些相似,但它一般是一個(gè)臨時(shí)的窗口,主要用于顯示提示信息或接受用戶(hù)輸入。
所以,在對話(huà)框中一般不需要菜單條,也不需要改變窗口大小。此外,在對話(huà)框出現時(shí),可以設定禁止其他窗口的輸入,直到這個(gè)對話(huà)框被關(guān)閉。
在應用程序中創(chuàng )建JDialog窗體需要實(shí)例化JDialog類(lèi),通常使用以下幾個(gè)JDialog類(lèi)的構造方法。
(1)public JDialog():創(chuàng )建一個(gè)沒(méi)有標題和父窗體的對話(huà)框
(2) public JDialog(Frame f): 創(chuàng )建一個(gè)指定父窗體的對話(huà)框,但該窗體沒(méi)有標題
(3)public JDialog(Frame f,boolean model):創(chuàng )建一個(gè)指定類(lèi)型的對話(huà)框,并指定父窗體,但該窗體沒(méi)有指定標題。
(4)public JDialog(Frame f,String titl):創(chuàng )建一個(gè)指定標題的父窗體的對話(huà)框
(5)public JDialog(Frame f,String title,boolean model):創(chuàng )建一個(gè)指定標題、窗體和模式的對話(huà)框
下面我們用代碼來(lái)實(shí)現:
package njci.software.MyNotePad2018; import java.awt.Container; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class ConfigDialog extends JDialog { /** * */ private static final long serialVersionUID = -713398359834685238L; public ConfigDialog(JFrame frame){ super(frame,"這是一個(gè)對話(huà)框",true); //Container container=getContentPane(); //創(chuàng )建一個(gè)容器 //container.add(new JLabel("這是一個(gè)對話(huà)框")); //在容器中添加標簽 //添加內部控件 JPanel pnlConfig=new JPanel(); pnlConfig.setLayout(null); JLabel lblWidth=new JLabel("寬度"); JLabel lblHeight=new JLabel("高度"); final JTextField txtWidth=new JTextField(); final JTextField txtHeight=new JTextField(); JButton btnSave=new JButton("保存"); JButton btnCancel=new JButton("取消"); //進(jìn)行布局 lblWidth.setBounds(50,30,60,40); txtWidth.setBounds(150,30,160,40); lblHeight.setBounds(50,100,60,40); txtHeight.setBounds(150,100,160,40); btnSave.setBounds(50,160,100,40); btnCancel.setBounds(200,160,100,40); pnlConfig.add(lblWidth); pnlConfig.add(txtWidth); pnlConfig.add(lblHeight); pnlConfig.add(txtHeight); pnlConfig.add(btnSave); pnlConfig.add(btnCancel); this.add(pnlConfig); this.setSize(400,320); this.setResizable(false);//窗體大小不可改變 this.setLocationRelativeTo(frame);;//居中顯示 } }
package javaswing; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class MyFrame extends JFrame { private static final long serialVersionUID = 4232937812480671357L; public MyFrame(){ final JFrame frmMain=new JFrame("我的第一個(gè)記事本"); frmMain.setSize(400,300); frmMain.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frmMain.setLocationRelativeTo(null); //居中顯示 frmMain.setVisible(true); ConfigDialog dlgConfig=new ConfigDialog(frmMain); dlgConfig.setVisible(true); } /** * */ public static void main(String[] args){ new MyFrame(); } }
運行效果如下所示:
在Swing中顯示文本或提示信息的方法是使用標題,它支持文本字符串和圖標。在應用程序的用戶(hù)界面中,一個(gè)簡(jiǎn)短的文本標簽可以使用戶(hù)知道這些組件的目的,所以標簽在Swing中是比較常用的組件。
標簽由JLabel類(lèi)定義,它的父類(lèi)為JComponent類(lèi)。
JLabel組件顯示的是靜態(tài)文本或者圖片,在通常情況下是不能編輯的,只起到提示的作用。觀(guān)察QQ登錄界面輸入框左側的頭像,他就可以用JLabel組件實(shí)現。
JLabel組件中主要的構造方法如下:
(1)JLabel():創(chuàng )建空的標簽。
(2)JLabel(String):創(chuàng )建一個(gè)帶初始字符串的標簽。
(3)JLabel(Icon):創(chuàng )建一個(gè)帶有指定圖像的標簽。
JLabel的主要方法見(jiàn)下表所示:
文本域一般用來(lái)讓用戶(hù)輸入姓名、信用卡號這樣的信息,它是一個(gè)能夠接收用戶(hù)的鍵盤(pán)輸入的小塊區域。
在創(chuàng )建文本域時(shí),參數類(lèi)型有四種:空的、空的并且具有指定長(cháng)度、帶有初始文本內容和帶有初始文本內容并具有指定長(cháng)度的。
文本域的主要方法如下所示:
幾乎所有的交互式程序中都會(huì )有按鈕,它是一種交互能力強且交互方便的控件,這個(gè)組件提供了“按下并動(dòng)作”的基本用戶(hù)界面。
構造方法如下:
(1):JButton():建立一個(gè)沒(méi)有標示字符串的新按鈕類(lèi)對象。
(2):JButton(String label):建立一個(gè)標示字符串為label的新按鈕類(lèi)對象。
下面通過(guò)代碼實(shí)現:
package javaswing; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class MyFrame extends JFrame { private static final long serialVersionUID = 4232937812480671357L; public MyFrame(){ final JFrame frmMain=new JFrame("我的第一個(gè)記事本"); frmMain.setSize(400,300); frmMain.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frmMain.setLocationRelativeTo(null); //居中顯示 frmMain.setVisible(true); //為按鈕添加一個(gè)單機事件 JButton jbn=new JButton("系統配置"); frmMain.add(jbn); } /** * */ public static void main(String[] args){ new MyFrame(); } }
運行效果如下所示:
在Swing中,每個(gè)組件在容器中都有一個(gè)具體位置和大小,而在容器中擺放各種組件時(shí)很難判斷其具體位置和大小。布局管理器提供了Swing組件安排、展示在容器中的方法及基本的布局功能。使用布局管理器較程序員直接在容器中控制Swing組件的位置和大小方便得多,可以有效地處理整個(gè)窗體的布局。Swing提供的常用布局管理器包括流布局管理器、邊界布局管理器和網(wǎng)格布局管理器。本節將探討Swing中常用的布局管理器。
在Swing中,除了使用布局管理器之外還可以使用絕對布局。絕對布局,就是硬性指定組件在容器中的位置和大小,可以使用絕對坐標的方式來(lái)指定組件的位置。
(1)使用Container.setLayout(null)方法取消布局管理器
(2) 使用Component.setBounds()方法設置每個(gè)組件的大小與位置。
下面我們用代碼實(shí)現絕對布局:
package javaswing; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class ConfigDialog extends JDialog { /** * */ private static final long serialVersionUID = -713398359834685238L; public ConfigDialog(JFrame frame){ super(frame,"這是一個(gè)對話(huà)框",true); //Container container=getContentPane(); //創(chuàng )建一個(gè)容器 //container.add(new JLabel("這是一個(gè)對話(huà)框")); //在容器中添加標簽 //添加內部控件 JPanel pnlConfig=new JPanel(); pnlConfig.setLayout(null); JLabel lblWidth=new JLabel("寬度"); JLabel lblHeight=new JLabel("高度"); final JTextField txtWidth=new JTextField(); final JTextField txtHeight=new JTextField(); JButton btnSave=new JButton("保存"); JButton btnCancel=new JButton("取消"); //進(jìn)行絕對布局 lblWidth.setBounds(50,30,60,40); txtWidth.setBounds(150,30,160,40); lblHeight.setBounds(50,100,60,40); txtHeight.setBounds(150,100,160,40); btnSave.setBounds(50,160,100,40); btnCancel.setBounds(200,160,100,40); pnlConfig.add(lblWidth); pnlConfig.add(txtWidth); pnlConfig.add(lblHeight); pnlConfig.add(txtHeight); pnlConfig.add(btnSave); pnlConfig.add(btnCancel); this.add(pnlConfig); this.setSize(400,320); this.setResizable(false);//窗體大小不可改變 this.setLocationRelativeTo(frame);;//居中顯示 } public static void main(String[] args) { //new ConfigDialog(frame); } }
流布局管理器是最基本的布局管理器,在整個(gè)容器中的布局正如其名,像“流”一樣從左到右擺放組件,知道占據了這一行的所有空間,然后再向下移動(dòng)一行。默認情況下,組件在每一行都是居中排列的,但是通過(guò)設置也可以更改組件在每一行上的排列位置。
FlowLayout布局管理器是一種最簡(jiǎn)單的布局管理方法,是JPanel的默認布局。它以流式的方式,自左向右,自上而下地放置容器中的組件,即組件按每行先后自左向右放置,一行放不下時(shí)換行。FlowLayout的默認對齊方式為居中對齊,也可以手工設置為左對齊或右對齊。
FlowLayout中常用的構造方法:
(1)FlowLayout():創(chuàng )建默認的FlowLayout布局管理器。
(2)FlowLayout(int):以指定的對齊方式創(chuàng )建FlowLayout布局管理器。其中參數:
FlowLayout.LEFT(左對齊)、FlowLayout.RIGHT(右對齊)、FlowLayout.CENTER(居中對齊)。
(3)FlowLayout(int,int,int);以指定的對齊方式及間距創(chuàng )建FlowLayout布局管理器。其中,第一個(gè)參數為對齊方式,第二個(gè)參數為組件間以及組件與容器邊之間的水平距離,第三個(gè)參數為組件之間以及組件與容器邊之間的垂直間距。
FlowLayout的主要方法如下表所示:
下面通過(guò)代碼實(shí)現FlowLayout的用法:
package javaswing; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.WindowConstants; public class FlowLayoutDemo extends JFrame{ public FlowLayoutDemo(){ setTitle("本窗體使用流布局管理器"); //設置窗體標題 Container c=getContentPane(); //設置窗體使用流布局管理器,使組件右對齊,并且設置組件之間的水平間隔與垂直間隔 setLayout(new FlowLayout(2,10,10)); for(int i=0;i<10;i++){ c.add(new JButton("按鈕"+i)); } setSize(300,200); setVisible(true); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args){ new FlowLayoutDemo(); } }
運行效果如下圖所示:
GridLayout布局管理器將容器區域劃分成m行m列,即一個(gè)個(gè)大小相等的格子,而容器中的組件就放入這些格子中,占用大小完全相同的一格。
GridLayout的創(chuàng )建方法如下:
(1)GridLayout():創(chuàng )建默認的GridLayout布局,所有組件在一行中顯示。
(2)GridLayout(int,int)按指定行數和列數創(chuàng )建GridLayout布局。
(3)Gridlayout(int,int,int)按指定行數、列數、行間距和列間距創(chuàng )建GridLayout布局。
GridLayout的主要方法如下表所示:
向網(wǎng)格中加入組件有兩種方法:一種采用默認順序,即從左向右、自上而下的順序;另一種是加入時(shí)指明網(wǎng)格位置。
具體代碼實(shí)現如下:
package javaswing; import java.awt.Container; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; public class GridLayoutPosition extends JFrame{ public GridLayoutPosition(){ Container c=getContentPane(); //設置容器使用網(wǎng)絡(luò )布局管理器,設置7行3列的網(wǎng)格,行間距為5,列間距為5 setLayout(new GridLayout(7,3,5,5)); for(int i=0;i<20;i++){ c.add(new JButton("按鈕"+i)); //循環(huán)添加按鈕 } setSize(300,300); setTitle("這是一個(gè)使用網(wǎng)格布局管理器的窗體"); setVisible(true); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args){ new GridLayoutPosition(); } }
運行效果如下所示:
在默認不指定窗體布局的情況下,Swing組件的布局模式是邊界布局管理器,邊界布局器可以將容器劃分為東、南、西、北、中五個(gè)區域,可以將組件加入到這5個(gè)區域中。容器調用Container類(lèi)的add()方法添加組件時(shí)可以設置此組件在邊界布局管理器中的區域,區域的控制可以由BorderLayout類(lèi)中的成員變量來(lái)決定,這些成員變量的具體含義如下表所示:
下面用代碼實(shí)現:
package javaswing; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; public class BorderLayoutPosition extends JFrame{ //定義組件擺放位置的數組 String[] border={BorderLayout.CENTER,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.EAST}; String[] buttonName={"center button","north button","south button","west button","east button"}; public BorderLayoutPosition(){ setTitle("這個(gè)窗體使用邊界布局管理器"); Container c=getContentPane(); //定義一個(gè)容器 setLayout(new BorderLayout()); //設置容器為邊界布局管理器 for(int i=0;i<border.length;i++){ //在容器中添加按鈕,并設置按鈕布局 c.add(border[i],new JButton(buttonName[i])); } setSize(350,250); //設置窗體大小 setVisible(true); //設置窗體可見(jiàn) //設置窗體關(guān)閉方式 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } public static void main(String[] args){ new BorderLayoutPosition(); } }
實(shí)現效果如下圖所示:
到此這篇關(guān)于Java Swing最詳細基礎知識總結的文章就介紹到這了,更多相關(guān)Java Swing知識總結內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站