(創作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡)
目錄
Swing
概述
MVC 架構
Swing 特點
控件
SWING UI 元素
JFrame
SWING 容器
說明?
常用方法
示例:
JDialog
說明
常用方法
重點內容
示例:
Swing
概述
Swing API 是一組可擴展的 GUI 組件,用來創建基于 JAVA 的前端/ GUI 應用程序。它是建立在 AWT API 之上,并且作為 AWT API 的替代者,因為它的幾乎每一個控件都對應 AWT 控件。 Swing 組件遵循模型 - 視圖 - 控制器架構來滿足下面的準則。
一個單一的 API 足夠支持多種外觀和風格。
API 是模擬驅動的,這樣最高層級的 API 不需要有數據。
API 是使用 Java Bean 模式的,這樣 Builder Tools 和 IDE 可以為開發者提供更好的服務來使用它。
MVC 架構
Swing API 架構用下列的方式來遵循基于松散的 MVC 架構。
模型表示組件的數據。
視圖表示組件數據的可視化表示形式。
控制器接受用戶在視圖上的輸入,并且在組件的數據上反映變化。
Swing 組件把模型作為一個單獨的元素,并且把視圖和控制器部分組合成用戶界面的元素。使用這種方式,Swing 具有可插拔的外觀與風格架構。
Swing 特點
輕量級 ——?Swing 組件是獨立的本地操作系統的 API,因為 Swing API 控件通常采用純 JAVA 代碼而不是采用底層的操作系統調用來呈現。
豐富的控件 ——?Swing 提供了一組豐富的先進的控件,如樹,頁簽窗體,滑動條,顏色選擇器,表格控件
高級自定義 ——?Swing 控件可以用非常簡單的方法來自定義,因為可視化外觀是獨立于內部表示的。
可插拔的外觀和風格 ——?基于 Swing 的 GUI 應用程序的外觀和風格可以在運行時根據有效的值改變。
控件
每個用戶界面考慮有以下三個主要方面:
UI 元素: 有用戶最終看到并且與之交互的核心視覺元素。GWT 提供了一個大量的廣泛使用和常見的元素列表,本教程我們將涉及從基本到復雜的變化。
布局: 他們定義應該如何在屏幕上組織 UI 元素,并且提供一個最終的外觀和風格給 GUI(圖形用戶界面)。這部分將在布局這一章涉及。
行為: 當用戶與 UI 元素交互時,這些事件發生。這部分將在事件處理這一章涉及。
每個 SWING 控件從下列組件類的等級繼承屬性。
SWING UI 元素
下列是當使用 SWING 來設計 GUI 時常用的控件列表。
JFrame
SWING 容器
容器是 SWING GUI 組件的組成部分。一個容器提供了一個可以放置組件的空間。在 AWT 中,一個容器是組件本身,并且它增加了功能來添加組件本身。下面是需要考慮的注意事項。
容器的子類被稱為容器。例如 JPanel,JFrame 和 JWindow。
容器可以僅僅添加組件到自身。
一個默認的布局使用 setLayout 方法來呈現在每個可以被重寫的容器中。
?下面是當使用 SWING 設計 GUI 事件時常用的容器列表。
JFrame?– java的GUI程序的基本思路是以JFrame為基礎,它是屏幕上window的對象,能夠最大化、最小化、關閉。
JPanel?– Java圖形用戶界面(GUI)工具包swing中的面板容器類,包含在javax.swing 包中,可以進行嵌套,功能是對窗體中具有相同邏輯功能的組件進行組合,是一種輕量級容器,可以加入到JFrame窗體中。。JLabel?– JLabel 對象可以顯示文本、圖像或同時顯示二者。可以通過設置垂直和水平對齊方式,指定標簽顯示區中標簽內容在何處對齊。默認情況下,標簽在其顯示區內垂直居中對齊。默認情況下,只顯示文本的標簽是開始邊對齊;而只顯示圖像的標簽則水平居中對齊。
JTextField?–一個輕量級組件,它允許編輯單行文本。
JPasswordField?– 允許我們輸入了一行字像輸入框,但隱藏星號(*) 或點創建密碼(密碼)
JButton?– JButton 類的實例。用于創建按鈕類似實例中的 "Login"。
說明?
在Swing組件中,最常見的一個容器就是JFrame。
JFrame是一個獨立存在的頂級容器(也叫窗口),不能放置在其他容器之中。
JFrame支持通用窗口所有的基本功能,例如窗口最小化、設定窗口大小等。
常用方法
? ?1.JFrame() ? ?創建一個無標題的窗口
? ? ? ? ?2.JFrame(String s) ? ?創建標題為s的窗口
? ? ? ? ?3.public void setSize(int width,int height) ? ?設置窗口大小
? ? ? ? 4.public void setLocation(int x,int y) ? ?設置窗口位置,默認位置為(0,0)
? ? ? ? 5.public void setBounds(int a,int b,int width,int height) ? ?設置窗口的初始位置是(a,b),即距離屏幕左邊a個像素,距離屏幕上方b個像素,窗口的寬是width,高是height
? ? ? ? 6.public void ?setBackgorund(color.red) ? ? ? ?設置窗體背景顏色? ? ? ? 7.public void setVisible(boolean b) ? ? 設置窗口是否可見,默認窗口是不可見的
? ? ? ? 8.public void setResizable(boolean b) ? ? 設置窗口是否可調整大小,默認窗口可調整大小
? ? ? ? 9.public void dispose() ? ? 撤銷當前窗口并釋放所有使用的資源?
? ? ? ? 10.add(Component comp) ? ? 向容器中增加組件? ? ? ? 11.getContentpane() ? ? ?返回此窗口的容器對象
? ? ? ? 12.public void setExtendedState(int state) ? ? 設置窗口的擴展狀態,其中參數state取JFrame類中的下面類常量:
? ? ? ? MAXIMIZED_HORIZ(水平方向最大化)
? ? ? ? MAXIMIZED_VERI(垂直方向最大化)
? ? ? ? MAXIMIZED_BOYH(水平、垂直方向最大化)? ? ? ? 13.public void setDefaultClose(int operation) ? ?設置單擊窗體右上角的關閉圖標后,程序會做出怎樣的處理
? ? 參數operation取JFrame類中的下列int型static常量,程序根據參數operation取值做出不同的處理:
? ? ? ? DO_NOTHING_ON_CLOSE(什么也不做)
? ? ? ? HIDE_ON_CLOSE(隱藏當前窗口)
? ? ? ? DISPOSE_ON_CLOSE(隱藏當前窗口并釋放窗體占有的其他資源)
? ? ? ? EXIT_ON_CLOSE(結束窗口所在應用程序)?
示例:
private static void createAndShowGUI(){//創建并設置JFrame容器窗口JFrame frame = new JFrame("JFrameTest"): //設置關閉窗口時的默認操作 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250,150);/設置窗口尺寸frame.setVisible(true);//展示JFrame容器窗口 } public static void main(String] args){//使用SwingUtilities工具類調用createAndShowGUl()方法顯示GUI程序 SwingUtilities.invokeLater(Example01::createAndShowGUl); }
?結果:
示例通過JFrame類創建了一個窗體,并指定窗體對象標題為“JFrameTest”。
通過JFrame類的相關方法分別設置了窗體對象關閉時的操作、窗體尺寸大小以及窗體信息可見。
在main()方法中,使用了javax.swing包下中SwingUtilities(封裝有一系列操作Swing的方法集合工具類)工具類的invokeLater()方法執行了GUI程序。
JDialog
JDialog是Swing的另外一個頂級容器,通常用來表示對話框窗口。
JDialog對話框可分為兩種:模態對話框和非模態對話框。
模態對話框:是指用戶需要等到處理完對話框后才能繼續與其他窗口交互。
非模態對話框:是指允許用戶在處理對話框的同時與其他窗口交互。
說明
雖然JFrame和JDialog都可以創建頂級容器窗口,但JDialog創建的窗口右上角沒有放大和縮小功能。
由于創建JDialog容器對象時,設置的模態參數modal為true,所以在操作時,必須先關閉JDialog對話框后才可以與JFrame窗口進行交互。
常用方法
重點內容
1.super(超級)
主要用于打開了子窗體時,阻塞對父窗體的修改。也就是說打開了窗體便不能對父窗體有任何動作,關閉子窗體才可以對父窗體開始操作。
super(A,B,C);
A-----父窗體對象
B-----對話框標題
C-----是否阻塞父窗體2.按鈕Btton
JButton btn=new JButton("彈出對話框");
表示創建按鈕,然后按鈕標簽為“彈出對話框”。c.setLayout(new FlowLayout());
設置布局,使用流布局。不使用流布局(也就是當沒有使用這句代碼時),按鈕會占滿整個窗體,而不是像下面的淡藍色長方形了。
示例:
import java.awt.Container;// 容器 import java.awt.FlowLayout;// 布局 import java.awt.event.ActionEvent;// 動作事件 import java.awt.event.ActionListener; // 動作監聽 import javax.swing.*;// JDialog窗體是Swing組件中的對話框class Demo extends JDialog{ // Demo繼承JDialog類public Demo(JFrame frame){/** 第一個參數:父窗體對象* 第二個參數:對話框標題* 第三個參數:是否阻塞父窗體*/super(frame,"對話框標題",true);Container c=getContentPane();// 獲取窗體容器,Container(容器),content(內容),pane(窗格)c.add(new JLabel("這是一個對話框"));// 設置一個標簽,label(標簽)//1 setVisible(true);// 設置窗體可見,visible(可見物),放這最后對話框縮起來setBounds(400,300,100,100);// 設置窗體坐標,x、y、長、寬,bounds(界限)}public static void main(String[] args){JFrame f=new JFrame("父窗體");f.setBounds(300,200,300,300);Container c=f.getContentPane();JButton btn=new JButton("彈出對話框");c.setLayout(new FlowLayout());//設置布局,使用流布局c.add(btn);// 容器c里添加按鈕f.setVisible(true);// 窗體是否可見f.setDefaultCloseOperation(EXIT_ON_CLOSE);// 關閉規則//添加動作監聽btn.addActionListener(new ActionListener(){ // Action(行動)public void actionPerformed(ActionEvent e){// performed(執行),event(事件) //1 new Demo(f);// 傳入f// 設置Demo類d,對d進行操作指令Demo d=new Demo(f);d.setVisible(true);// 設置窗體可視化}});} }
運行效果:
- 源碼剛開始運行時,沒有任何動作
- 點擊按鈕后