JFrame介紹:
在 JFrame 對象中可以使用add方法添加 AWT 或者 Swing 組件。
JFrame 有一個 Content Pane,窗口能顯示的所有組件都是添加在這個 Content Pane 中
getContentPane 和 setContentPane 就是用於獲取和設置其 Content Pane 的。
對JFrame添加組件有兩種方式:
* 1)用getContentPane()方法獲得JFrame的內容面板,再對其加入組件:frame.getContentPane().add(childComponent)
* 2)建立一個Jpanel或JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為
* JFrame的內容面板:JPanel contentPane=new JPanel();
……//把其它組件添加到Jpanel中;
frame.setContentPane(contentPane); //把contentPane對象設置成為frame的內容面板
JFrame的一些插件:
JPanel – Java圖形用戶界面(GUI)工具包swing中的面板容器類,包含在javax.swing 包中,可以進行嵌套,功能是對窗體中具有相同邏輯功能的組件進行組合,是一種輕量級容器,可以加入到JFrame窗體中。。
JLabel – JLabel 對象可以顯示文本、圖像或同時顯示二者。可以通過設置垂直和水平對齊方式,指定標簽顯示區中標簽內容在何處對齊。默認情況下,標簽在其顯示區內垂直居中對齊。默認情況下,只顯示文本的標簽是開始邊對齊;而只顯示圖像的標簽則水平居中對齊。
JTextField –一個輕量級組件,它允許編輯單行文本。
JPasswordField – 允許我們輸入了一行字像輸入框,但隱藏星號(*) 或點創建密碼(密碼)
JButton – JButton 類的實例。用於創建按鈕類似實例中的 "Login"。
JLabel插入圖片:
JLabel jl = new JLabel("這是一個JFrame窗體", JLabel.CENTER); // 獲取圖片所在的URL,這種讀取圖片方式簡單,但是如果圖片放在數據庫內就需要另外一種
Icon icon = new ImageIcon("F:\\Desktop\\jpg\\1.jpg", "圖片描述"); jl.setIcon(icon);
JLabel插入文本並修改其字體和顏色
JLabel jl = new JLabel("這是一個JFrame窗體", JLabel.CENTER); // 初始化字體 ITALIC文字為斜體 BOLD文字為粗體
Font fnt = new Font("宋體", Font.ITALIC + Font.BOLD, 16); // 標簽設置字體
jl.setFont(fnt); // 這種標簽字體顏色
jl.setForeground(Color.RED); // 設置標簽背景顏色 jlabel默認是透明的,所以默認情況下對其設置背景色是不管用的。 // 但是這樣就可以更改其背景顏色:
jl.setOpaque(true); jl.setBackground(Color.PINK);
setDefaultCloseOperation:
* setDefaultCloseOperation(int operation):設置用戶在此窗體上發起 "close"
* 時默認執行的操作。方法中的參數解釋如下:
* 為“0”或DO_NOTHING_ON_CLOSE:
* (在 WindowConstants中定義):不執行任何操作;要求程序在已注冊的WindowListener 對象的 windowClosing 方法中處理該操作。
* 比如實例程序代碼中更改為f.setDefaultCloseOperation(f.
* DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果,可以發現窗口無法關閉,
* 下面是相同測試方法,不再解釋了。
* 為“1”或HIDE_ON_CLOSE: 調用任意已注冊的 WindowListener
* 對象后自動隱藏該窗體。此時沒有關閉程序,只是將程序界面隱藏了。可以打開任務管理器,可以看到一個叫“java.exe”的進程(如果調試運行了多個java程序
* ,則會看到多個“java.exe”的進程),如果此時用EditPlus測試程序,會發現當單擊窗口的關閉按鈕關閉窗口后,卻無法再次對程序進行調試,
* 因為程序線程沒有關閉,在任務管理器中關閉java.exe(如果有多個“java.exe”的進程,則先都關閉掉,再來測試該問題)基礎后,
* EditPlus才可以重新編譯改程序。
* 為“2”或DISPOSE_ON_CLOSE: 調用任意已注冊 WindowListener
* 的對象后自動隱藏並釋放該窗體。但繼續運行應用程序,釋放了窗體中占用的資源。 為“3”EXIT_ON_CLOSE(在 JFrame 中定義):使用
* System exit 方法退出應用程序。僅在應用程序中使用。結束了應用程序。 默認情況下,該值被設置為 HIDE_ON_CLOSE。
* 當注釋掉實例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);語句時,起到的效果和f.
* setDefaultCloseOperation(f. HIDE_ON_CLOSE);
* 或者f.setDefaultCloseOperation(1);一樣。
結果:
代碼:

1 import java.awt.Color; 2 import java.awt.Container; 3 import java.awt.Font; 4 import java.net.URL; 5 6 import javax.swing.Icon; 7 import javax.swing.ImageIcon; 8 import javax.swing.JFrame; 9 import javax.swing.JLabel; 10 import javax.swing.SwingConstants; 11 import javax.swing.WindowConstants; 12 13 public class qmh extends JFrame { 14 public qmh() { 15 16 // 在 JFrame 對象中可以使用add方法添加 AWT 或者 Swing 組件。 17 // JFrame 有一個 Content Pane,窗口能顯示的所有組件都是添加在這個 Content Pane 中 18 // getContentPane 和 setContentPane 就是用於獲取和設置其 Content Pane 的。 19 /* 20 * 對JFrame添加組件有兩種方式: 21 * 1)用getContentPane()方法獲得JFrame的內容面板,再對其加入組件:frame.getContentPane().add( 22 * childComponent) 23 * 2)建立一個Jpanel或JDesktopPane之類的中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為 24 * JFrame的內容面板: JPanel contentPane=new JPanel(); ……//把其它組件添加到Jpanel中; 25 * frame.setContentPane(contentPane); //把contentPane對象設置成為frame的內容面板 26 */ 27 Container container = getContentPane(); 28 // 創建一個標簽,並讓標簽文本居中對齊,還有LEFT和RIGHT 29 // 還可以更改標簽內容,獲取標簽內容,和文字樣式,可見: 30 // https://www.cnblogs.com/yangf428/p/11066406.html 31 JLabel jl = new JLabel("這是一個JFrame窗體", JLabel.CENTER); 32 // 獲取圖片所在的URL,這種讀取圖片方式簡單,但是如果圖片放在數據庫內就需要另外一種 33 Icon icon = new ImageIcon("F:\\Desktop\\jpg\\1.jpg", "圖片描述"); 34 jl.setIcon(icon); 35 jl.setHorizontalAlignment(SwingConstants.CENTER); 36 jl.setOpaque(true); 37 38 // 初始化字體 ITALIC文字為斜體 BOLD文字為粗體 39 Font fnt = new Font("Serief", Font.ITALIC + Font.BOLD, 16); 40 // 標簽設置字體 41 jl.setFont(fnt); 42 // 這種標簽字體顏色 43 jl.setForeground(Color.RED); 44 // 設置標簽背景顏色 jlabel默認是透明的,所以默認情況下對其設置背景色是不管用的。 45 // 但是這樣就可以更改其背景顏色: 46 jl.setOpaque(true); 47 jl.setBackground(Color.PINK); 48 49 container.add(jl); 50 setSize(500, 300); 51 // 設置窗體可見,沒有該語句,窗體將不可見,此語句必須有,否則沒有界面就沒有如何意義了 52 setVisible(true); 53 //離顯示屏上邊緣100像素,里顯示屏左邊緣100像素 54 // setLocation(100,100); 55 // 用戶單擊窗口的關閉按鈕時程序執行的操作 56 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 57 /* 58 * setDefaultCloseOperation(int operation):設置用戶在此窗體上發起 "close" 59 * 時默認執行的操作。方法中的參數解釋如下: 60 * 為“0”或DO_NOTHING_ON_CLOSE: 61 * (在 WindowConstants中定義):不執行任何操作;要求程序在已注冊的WindowListener 對象的 windowClosing 方法中處理該操作。 62 * 比如實例程序代碼中更改為f.setDefaultCloseOperation(f. 63 * DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果,可以發現窗口無法關閉, 64 * 下面是相同測試方法,不再解釋了。 65 * 為“1”或HIDE_ON_CLOSE: 調用任意已注冊的 WindowListener 66 * 對象后自動隱藏該窗體。此時沒有關閉程序,只是將程序界面隱藏了。可以打開任務管理器,可以看到一個叫“java.exe”的進程(如果調試運行了多個java程序 67 * ,則會看到多個“java.exe”的進程),如果此時用EditPlus測試程序,會發現當單擊窗口的關閉按鈕關閉窗口后,卻無法再次對程序進行調試, 68 * 因為程序線程沒有關閉,在任務管理器中關閉java.exe(如果有多個“java.exe”的進程,則先都關閉掉,再來測試該問題)基礎后, 69 * EditPlus才可以重新編譯改程序。 70 * 為“2”或DISPOSE_ON_CLOSE: 調用任意已注冊 WindowListener 71 * 的對象后自動隱藏並釋放該窗體。但繼續運行應用程序,釋放了窗體中占用的資源。 為“3”EXIT_ON_CLOSE(在 JFrame 中定義):使用 72 * System exit 方法退出應用程序。僅在應用程序中使用。結束了應用程序。 默認情況下,該值被設置為 HIDE_ON_CLOSE。 73 * 當注釋掉實例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);語句時,起到的效果和f. 74 * setDefaultCloseOperation(f. HIDE_ON_CLOSE); 75 * 或者f.setDefaultCloseOperation(1);一樣。 76 */ 77 } 78 79 public static void main(String args[]) { 80 new qmh(); 81 } 82 } 83 84 //另一種使用JFrame的用法 85 //import java.awt.Dimension; 86 //import java.awt.Color; 87 //import java.awt.Font; 88 //import java.awt.Point; 89 //import javax.swing.JLabel; 90 //import javax.swing.JFrame; 91 //import javax.swing.Icon; 92 //import javax.swing.ImageIcon; 93 //public class JLabelDemo04 94 //{ 95 // public static void main(String args[]) 96 // { 97 // JFrame frame = new JFrame("通過圖像路徑實例化JLabel"); 98 // // 指定圖片路徑 99 // String picPath = "F:\\Desktop\\jpg\\1.jpg"; 100 // // 實例化ImageIcon 101 // Icon icon = new ImageIcon(picPath); 102 // // 實例化標簽對象 103 // JLabel lab = new JLabel("通過圖片路徑來設置JLabel", icon, JLabel.CENTER); 104 // // 初始化字體 105 // Font fnt = new Font("Serief", Font.ITALIC + Font.BOLD, 16); 106 // // 標簽設置字體 107 // lab.setFont(fnt); 108 // // 這種標簽字體顏色 109 // lab.setForeground(Color.RED); 110 // // 設置標簽背景顏色 111 // lab.setOpaque(true); 112 // lab.setBackground(Color.PINK); 113 // 114 // //把標簽放到面板中 115 // frame.add(lab); 116 // Dimension dim = new Dimension(); 117 // dim.setSize(500, 300); 118 // frame.setSize(dim); 119 // Point point = new Point(100, 100); // 設置坐標 120 // frame.setLocation(point); 121 // frame.setVisible(true); 122 // } 123 //}
用戶登錄框實例:

1 import javax.swing.JButton; 2 import javax.swing.JFrame; 3 import javax.swing.JLabel; 4 import javax.swing.JPanel; 5 import javax.swing.JPasswordField; 6 import javax.swing.JTextField; 7 public class SwingLoginExample { 8 9 public static void main(String[] args) { 10 // 創建 JFrame 實例 11 JFrame frame = new JFrame("Login Example"); 12 // Setting the width and height of frame 13 frame.setSize(350, 200); 14 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 15 16 /* 創建面板,這個類似於 HTML 的 div 標簽 17 * 我們可以創建多個面板並在 JFrame 中指定位置 18 * 面板中我們可以添加文本字段,按鈕及其他組件。 19 */ 20 JPanel panel = new JPanel(); 21 // 添加面板 22 frame.add(panel); 23 /* 24 * 調用用戶定義的方法並添加組件到面板 25 */ 26 placeComponents(panel); 27 28 // 設置界面可見 29 frame.setVisible(true); 30 } 31 32 private static void placeComponents(JPanel panel) { 33 34 /* 布局部分我們這邊不多做介紹 35 * 這邊設置布局為 null 36 */ 37 panel.setLayout(null); 38 39 // 創建 JLabel 40 JLabel userLabel = new JLabel("User:"); 41 /* 這個方法定義了組件的位置。 42 * setBounds(x, y, width, height) 43 * x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。 44 */ 45 userLabel.setBounds(10,20,80,25); 46 panel.add(userLabel); 47 48 /* 49 * 創建文本域用於用戶輸入 50 */ 51 JTextField userText = new JTextField(20); 52 userText.setBounds(100,20,165,25); 53 panel.add(userText); 54 55 // 輸入密碼的文本域 56 JLabel passwordLabel = new JLabel("Password:"); 57 passwordLabel.setBounds(10,50,80,25); 58 panel.add(passwordLabel); 59 60 /* 61 *這個類似用於輸入的文本域 62 * 但是輸入的信息會以點號代替,用於包含密碼的安全性 63 */ 64 JPasswordField passwordText = new JPasswordField(20); 65 passwordText.setBounds(100,50,165,25); 66 panel.add(passwordText); 67 68 // 創建登錄按鈕 69 JButton loginButton = new JButton("login"); 70 loginButton.setBounds(10, 80, 80, 25); 71 panel.add(loginButton); 72 } 73 74 }