Java-Swing的JFrame的一些插件使用詳解


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 //}
View Code

 

 

用戶登錄框實例:

 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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM